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