在断点处打印线程id 我正在调试一些C++代码。当我在断点处暂停时,如果我执行info-thread,gdb会显示进程中所有线程的列表,并在断点处执行的线程旁边放置一个星号。是否有gdb命令使gdb在到达断点时告诉您线程id

在断点处打印线程id 我正在调试一些C++代码。当我在断点处暂停时,如果我执行info-thread,gdb会显示进程中所有线程的列表,并在断点处执行的线程旁边放置一个星号。是否有gdb命令使gdb在到达断点时告诉您线程id,c++,multithreading,debugging,gdb,C++,Multithreading,Debugging,Gdb,我正在执行catch-throw和catch-catch,以便在线程1上引发异常时进行调试。但是,线程2同时也抛出和捕获异常。因为,我只对thread1上的throw和catch感兴趣,所以我计划向gdb请求threadid,并在threadid为2时编写断点脚本以继续 (gdb) catch throw Catchpoint 7 (throw) (gdb) catch catch Catchpoint 8 (catch) (gdb) command 8 > if threadid ==

我正在执行
catch-throw
catch-catch
,以便在线程1上引发异常时进行调试。但是,线程2同时也抛出和捕获异常。因为,我只对thread1上的
throw
catch
感兴趣,所以我计划向gdb请求threadid,并在threadid为2时编写断点脚本以继续

(gdb) catch throw
Catchpoint 7 (throw)
(gdb) catch catch
Catchpoint 8 (catch) 
(gdb) command 8
> if threadid == 2
>      c
> end
如果threadid==2,你能告诉我如何写这行代码吗

使用:

调试器方便变量
$\u thread
$\u gthread
包含, 分别为每次次线程数和全局线程数 当前线程的编号。你会发现这在写作中很有用 断点条件表达式、命令脚本等。看见 便利性变量,了解有关便利性的一般信息 变量

使用:

-函数:gdb.selected_thread()此函数返回线程 所选线程的对象。如果没有选定的线程,则此 将不返回任何值


一般来说,当GDB缺少一个功能时,您不太可能无法使用Python API实现它,因为它允许您探索正在运行的程序和上下文。

那条
catch
行实际上不会工作,因为
Python
不是这样的表达式的有效部分。@TomTromey没错。我修改了答案。谢谢
catch catch if $_thread == 1
catch catch
command
  python
    if gdb.selected_thread() != 1:
      gdb.execute('continue');
  end
end