GDB-我在哪个线程上?

The*_*ere 3 c++ debugging multithreading gdb

当我在GDB中遇到断点时,我需要找出它在什么线程上,我就这样做了info thr。这会打印出我程序中所有线程的列表,并且当前线程被标记为*

而不是让GDB转储整个线程列表,然后手动读取哪个线程具有*,gdb中是否有一条命令可以简单地打印出当前线程?

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

(gdb) command 12
    >> p " xyz just happpened"
    >> whatThreadIsThis // I would like this
    >> c
    >> end
Run Code Online (Sandbox Code Playgroud)

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

use*_*321 6

gdb 还有便利变量。其中之一是:

$_thread

    The thread number of the current thread.
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令打印它:

(gdb) p $_thread
$2 = 2
Run Code Online (Sandbox Code Playgroud)

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

condition 1 $_thread != 1
Run Code Online (Sandbox Code Playgroud)


nos*_*nos 5

您可以使用“ thread thread-id”命令切换到另一个线程,如文档所述。文档似乎没有提到的是,没有任何参数,它仅显示当前线程:

 (gdb) thread
 [Current thread is 1 (Thread 0x7ffff7fc2700 (LWP 4641))]
Run Code Online (Sandbox Code Playgroud)