我的程序运行不正常.看起来它陷入无限循环或坏互斥锁定/解锁.但是,我不知道bug在哪里.我尝试使用gdb进行调试.
我不能使用gdb backtrace命令,因为我没有指定断点.我无法指定它,因为我不知道错误在哪里.
gdb是否有"动态"回溯的工具?
Emp*_*ian 13
我不能使用gdb backtrace命令,因为我没有指定断点.
是的你可以.
您需要的只是在某处停止劣质(被调试)程序.
当您第一次附加到程序时,GDB将停止所有线程,您可以检查它们的位置.之后,你可以点击Ctrl-C,再看看所有线程.一个有用的命令是thread apply all where.
K.K*_*K.K 10
从程序的"ps -ef"获取进程ID.使用pstack确切地知道它挂在哪个函数中.它将打印出执行堆栈跟踪.
示例输出:
$ pstack PROCESS_PID
\#0 0x00000038cfaa664e in waitpid () from /lib64/libc.so.6
\#1 0x000000000043ed42 in ?? ()
\#2 0x000000000043ffbf in wait_for ()
\#3 0x0000000000430bc9 in execute_command_internal ()
\#4 0x0000000000430dbe in execute_command ()
\#5 0x000000000041d526 in reader_loop ()
\#6 0x000000000041ccde in main ()
Run Code Online (Sandbox Code Playgroud)