如何以编程方式识别 GDB 中打印的线程 ID

How to programmatically identify the thread ID printed in GDB

我正在尝试调试用 C++ 编写的应用程序,该应用程序是为基于 ARM 的处理器编译的 运行 linux。

当应用程序间歇性崩溃时,它会停在某个线程,我认为该线程是错误所在(分段错误)。

我的问题是,我无法识别这个线程是什么。当 GDB 为 运行 时,我看到在 eclipse 中打印了以下内容。

带蓝色下划线的数字是什么?有没有办法让我以编程方式访问它们,以便我知道在哪里查看代码?

根据@Selcuk Cihan在上述评论中发表的this link,方括号内的第一个数字是GDB本身分配的整数标识符,另一个是分配给线程的SysTag。

除了回答。

您还可以在您的程序中访问更大数字的线程 ID

UNIX:

#include <sys/syscall.h>
syscall(SYS_gettid);

WINDOWS:(未测试)

#include <windows.h>
GetCurrentThreadId();

如果您使用 Linux/gcc,更好的解决方案是使用 pthread_setname_np 实际为线程提供一个描述性名称。 gdb 将在遇到断点时使用这个名称,等等。请注意,这是 pthreads 的 GNU 扩展。