在GDB中调试多线程服务器 - 查找每个线程的状态。执行时继续执行

时间:2012-06-09 07:38:22

标签: c++ gdb pthreads

我使用gdb附加到我的多线程应用程序,然后键入cont以继续执行。

  • 有没有办法在cont gdb状态下随时停止执行并检查每个线程的作用?
  • 如何检查每个线程的状态并获取每个线程的执行行号? (命令)

5 个答案:

答案 0 :(得分:2)

这就是我的所作所为(取自here

创建一个转储所有线程的堆栈跟踪的小gdb脚本stackdumper.gdb

thread apply all backtrace

然后重复附加gdb并运行转储程序:

for i in $(seq 1 10) ; do
  gdb -batch -x stackdumper.gdb ./a.out 123456 > stack.$i
  sleep 10
done

其中./a.out是您感兴趣的二进制文件,123456是PID。

调整睡眠以符合您的采样需求。

答案 1 :(得分:2)

thread apply all bt

或者

info threads

t <threadid from above trace > 其次是

wherebt

答案 2 :(得分:1)

要获取所有已停止线程的回溯,请键入

thread apply all bt

命令(输出与MacOSX崩溃报告框中的输出完全相同)。

通常在gdb中同时停止线程。

参考:http://www.delorie.com/gnu/docs/gdb/gdb_40.html

这里是“全停”模式,默认为:http://sourceware.org/gdb/onlinedocs/gdb/All_002dStop-Mode.html

答案 3 :(得分:0)

  

这是否可以随时在cont gdb状态下停止执行并检查每个线程执行的操作

如果您询问如何在没有gdb的情况下检查线索的运行情况,您可以运行pstask <pid-of-your application>

答案 4 :(得分:0)

是“pstack”因为我不认为“pstask”是linux中的任何命令,如果是请提供更多信息

相关问题