GDB - 我在用什么线程?

时间:2017-03-24 19:03:04

标签: c++ multithreading debugging gdb

当我在GDB中遇到断点时,我需要找出它所在的线程,我做info thr。这打印出我程序中所有线程的列表,当前线程标有*

而不是让GDB转储整个线程列表,然后手动读取具有*的线程,gdb中是否有一个命令只打印出当前线程?

我需要这个,因为我在我的程序中记录了一些行为。换句话说,我有类似的东西 -

(gdb) command 12
    >> p " xyz just happpened"
    >> whatThreadIsThis // I would like this
    >> c
    >> end

如果GDB实现类似whatThreadIsThis命令的东西,那么我可以使用GDB记录所有出现的xyz及其发生的线程。

2 个答案:

答案 0 :(得分:5)

您可以使用"主题thread-id"命令切换到文档提到的另一个线程。文档似乎没有提到的是,没有任何参数,它只是打印当前线程:

 (gdb) thread
 [Current thread is 1 (Thread 0x7ffff7fc2700 (LWP 4641))]

答案 1 :(得分:1)

gdb也有Convenience Variables。 其中之一是:

$_thread

    The thread number of the current thread.

您可以使用以下命令进行打印:

(gdb) p $_thread
$2 = 2

还可以在以下条件下使用:

condition 1 $_thread != 1