2

我使用 gdb 附加到我的多线程应用程序,然后在该类型之后cont继续执行。

  • 有什么方法可以随时在contgdb 状态下停止执行并检查每个线程在做什么?
  • 如何检查每个线程的状态并获取每个线程的执行行号?(命令)
4

5 回答 5

2

这就是我所做的,(取自这里

创建一个小 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。

调整睡眠以满足您的采样需求。

于 2012-06-09T07:46:41.093 回答
2

thread apply all bt

或者

info threads

t <threadid from above trace > 其次是

where或者bt

于 2012-06-09T08:25:40.173 回答
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

于 2012-06-09T07:41:34.547 回答
0

这是在 cont gdb 状态下随时停止执行并检查每个线程做什么的任何方法吗

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

于 2012-06-09T07:43:39.020 回答
0

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

于 2012-06-09T08:34:52.277 回答