繁体   English   中英

具有pthread的GDB

[英]GDB with pthreads

我有一个C程序,主要功能创建线程,并且我必须调试一个线程。 我正在为他使用gdb。 但是,我不能在该程序的特定C文件上“破坏”或“监视”变量。 例如。 我的线程6被编程并使用某些C文件,我不得不在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一起广泛使用,但是我有一些可以尝试的指针。

  1. 您可以使用thread threadnum切换到要调试的thread threadnum ,其中threadnum是通过info threads显示的id(第一列)。

  2. 检查正在查找的源目录中是否有文件usinf show directories命令。 如果源所在的目录不在列表中,请通过directory <path_to_source>命令将其添加

  3. 在设置断点或监视时,请使用自动完成功能(通常<Tab> )查找可以设置的断点和监视。

请检查YoLinux pthreads教程中“ 线程调试”部分下的链接,以获取更多详细信息。

希望这可以帮助!

您的问题是您的程序在编译时没有调试信息。

最可能的原因:尽管您声明了什么, call_connect.c仍未使用-ggdb标志进行编译(请检查您的构建日志以进行验证),或者链接行上有“ stray” -s (这将剥离可执行文件) 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM