我想为gdb写一个脚本,它将保存进程的backtrace
(堆栈)每10毫秒。我该怎么做呢?
它可以像“身无分文”的调用图分析一样(对于那些不能使用任何高级分析器的人)。
是的,有很多高级分析器。适用于流行的CPU和流行的OSes。Shark非常令人印象深刻,易于使用,但我想通过这样的脚本获得基本的功能,与gdb一起工作。
发布于 2010-03-25 22:51:26
你能得到lsstack吗?也许你可以从你的应用程序之外的脚本运行它。为什么是10ms?在100ms或更长的时间内,百分比将大致相同。如果应用程序太快,你可以通过一个外部循环人为地减慢它的速度,这也不会改变百分比。就此而言,如果应用程序运行的时间足够长,并且您的目标是找出性能问题所在,那么您可以使用Ctrl-C在gdb下手动获取示例。
发布于 2015-11-19 00:51:57
(1)手册。在shell中执行以下命令。在shell提示符下重复按Ctrl+C键。
gdb -x print_callstack.gdb -p pid
或者,(2)在另一个外壳上重复向pid发送信号,次数与下面的循环相同
let count=0; \
while [ $count -le 100 ]; do \
kill -INT pid ; sleep 0.10; \
let $count=$count+1; \
done
(1)的print_callstack.gdb
来源如下:
set pagination 0
set $count = 0
while $count < 100
backtrace
continue
set $count = $count + 1
end
detach
quit
pstack https://linux.die.net/man/1/pstack的手册页
https://stackoverflow.com/questions/2512482
复制相似问题