我有一个C程序,主函数创建线程,我必须调试一个线程。我也在用gdb。但是我不能“中断”或“监视”这个程序的特定C文件上的变量。例如,我的线程6已经编程并使用了某些C文件,我必须在say call_connect.C的601行中断。这不可能吗?如果我尝试,就会发生这样的情况:

(gdb) info threads
  6 Thread 0xb5c96b70 (LWP 3608)  0xb7fe1424 in __kernel_vsyscall ()
  5 Thread 0xb6497b70 (LWP 3607)  0xb7fe1424 in __kernel_vsyscall ()
  4 Thread 0xb6c98b70 (LWP 3606)  0xb7fe1424 in __kernel_vsyscall ()
  3 Thread 0xb7499b70 (LWP 3605)  0xb7fe1424 in __kernel_vsyscall ()
  2 Thread 0xb7c9ab70 (LWP 3604)  0xb7fe1424 in __kernel_vsyscall ()
* 1 Thread 0xb7c9b6c0 (LWP 3603)  0x0804a178 in main ()

(gdb) break 601 thread 6
No line 601 in file "events.c".

(gdb) break call_connect.c:601 thread 6
No source file named call_connect.c.

另外,我用-O0-ggdb调试了我的C代码,但仍然不能监视变量。
这就是我试图读取char*ptext变量时得到的结果。
(gdb) print ptext
No symbol "ptext" in current context.
(gdb) watch ptext
No symbol "ptext" in current context.

有人能帮忙吗?

最佳答案

虽然我没有广泛使用gdbpthreads一起使用,但是我有一些指针,您可以尝试一下。
您可以使用thread threadnum切换到要调试的线程,其中threadnum是通过info threads显示的id(第一列)。
检查正在查找的源目录以查找文件usinfshow directories命令。如果源所在的目录不在列表中,则通过directory <path_to_source>命令添加它
设置断点或监视时,使用自动完成(通常<Tab>)查找可以设置的断点和监视。
有关详细信息,请查看YoLinux pthreads Tutorials中线程调试部分下的链接。
希望这有帮助!

07-25 21:53
查看更多