我使用 gdb 附加到我的多线程应用程序,然后在该类型之后cont
继续执行。
- 有什么方法可以随时在
cont
gdb 状态下停止执行并检查每个线程在做什么? - 如何检查每个线程的状态并获取每个线程的执行行号?(命令)
这就是我所做的,(取自这里)
创建一个小 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。
调整睡眠以满足您的采样需求。
thread apply all bt
或者
info threads
t <threadid from above trace >
其次是
where
或者bt
要获取所有已停止线程的回溯,请键入
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
这是在 cont gdb 状态下随时停止执行并检查每个线程做什么的任何方法吗
如果您询问如何检查线程在没有gdb
的情况下执行的操作,您可以运行
pstask <pid-of-your application>
是“pstack”吗,因为我认为“pstask”不是linux中的任何命令,如果是,请提供更多信息