默认情况下gdb连接到哪个线程

时间:2016-08-27 13:29:10

标签: gdb

如果我有一些多线程进程并希望使用gdb使用attach命令跟踪它,它将连接到哪个线程(例如当前运行或主要)?我知道我可以用info threads发现它,但我想知道它默认选择哪个线程。

1 个答案:

答案 0 :(得分:1)

对于Linux,当gdb附加时,ptrace命令会停止所有线程。

根据我的经验,gdb默认为C / C ++应用程序的主线程。如果你附加到一个进程并执行'bt',它将列出'main'的堆栈。

但是,所有线程都可以获得信息。 gdb可以查看/proc文件系统中的线程信息。 proc包含有关tasks区域中每个线程的信息。有关堆栈地址的详细信息位于stat文件以及maps文件中。还可以获得有关每个线程的寄存器值的详细信息。

根据你的问题,我经常想知道为什么单步执行多线程应用程序会导致gdb从一个线程跳转到另一个线程。我认为gdb仍然受内核调度程序的支配,因此线程上的一个步骤可能会导致不同的线程获取CPU资源并触发断点。