繁体   English   中英

在断点处打印线程ID

[英]Print thread id at breakpoint

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

我正在执行catch throwcatch catch ,以在线程1上引发异常时进行调试。但是,线程2同时也在引发和捕获异常。 因为,我只关心throwcatch的线程1,我计划问GDB的线程ID和脚本断点继续,如果线程ID是2。

(gdb) catch throw
Catchpoint 7 (throw)
(gdb) catch catch
Catchpoint 8 (catch) 
(gdb) command 8
> if threadid == 2
>      c
> end

if threadid == 2您能告诉我如何写这行吗?

使用内置的$_thread便捷变量

调试器便利变量$_thread$_gthread分别包含当前线程的每个下级线程号和全局线程号。 您可能会发现这对于编写断点条件表达式,命令脚本等很有用。 有关便利性变量的一般信息,请参见便利性变量。

catch catch if $_thread == 1

使用Python API

—函数:gdb.selected_thread()此函数返回所选线程的线程对象。 如果没有选择的线程,则将返回无。

catch catch
command
  python
    if gdb.selected_thread() != 1:
      gdb.execute('continue');
  end
end

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM