如果我有一些多线程进程并希望使用gdb
使用attach
命令跟踪它,它将连接到哪个线程(例如当前运行或主要)?我知道我可以用info threads
发现它,但我想知道它默认选择哪个线程。
答案 0 :(得分:1)
对于Linux,当gdb附加时,ptrace
命令会停止所有线程。
根据我的经验,gdb默认为C / C ++应用程序的主线程。如果你附加到一个进程并执行'bt',它将列出'main'的堆栈。
但是,所有线程都可以获得信息。 gdb可以查看/proc
文件系统中的线程信息。 proc包含有关tasks
区域中每个线程的信息。有关堆栈地址的详细信息位于stat
文件以及maps
文件中。还可以获得有关每个线程的寄存器值的详细信息。
根据你的问题,我经常想知道为什么单步执行多线程应用程序会导致gdb从一个线程跳转到另一个线程。我认为gdb仍然受内核调度程序的支配,因此线程上的一个步骤可能会导致不同的线程获取CPU资源并触发断点。