【问题标题】:Automate gdb: show backtrace every 10 ms自动化 gdb:每 10 毫秒显示一次回溯
【发布时间】:2010-03-25 00:54:59
【问题描述】:

我想为 gdb 编写一个脚本,它将每 10 毫秒保存一次进程 backtrace(堆栈)。我该怎么做?

它可以像'penniless' 的调用图分析(对于不能使用任何高级分析器的人)。

是的,有很多高级分析器。适用于流行的 CPU 和流行的操作系统。 Shark 非常令人印象深刻且易于使用,但我想通过此类脚本获得基本功能,与 gdb 一起使用。

【问题讨论】:

  • 如果您的平台可以使用 Dtrace,您最好使用它。
  • 我没有平台的 dtrace。我有平台的 gdb。

标签: profiling gdb backtrace


【解决方案1】:

你能得到 lsstack 吗?也许您可以从应用程序外部的脚本运行它。为什么是 10 毫秒?在 100 毫秒或更长时间时,百分比将大致相同。如果应用程序太快,您可以通过外部循环人为地减慢它,这也不会改变百分比。就此而言,如果应用程序运行时间足够长并且您的目标是找出性能问题所在,您可以使用 Ctrl-C 在 gdb 下手动获取示例。

【讨论】:

  • 我想要自动定期堆栈转储。对于可以运行几分钟的大型应用程序。 10ms 对我来说是不可能按下 ctrl-c 的
  • 在手动模式下,当应用程序中有 >2-3 个这样的点时,存在无法从大多数热点获取堆栈的风险。
  • 不,我无法获得 lsstack。我可以使用 gdb,而且 gdb 可以更好地处理我的应用程序。
  • @osgx:关于您的第二条评论,我想您会发现它有效,原因如下。你所谓的热点,当修复后,将减少大约 X% 的执行时间(可能在 5% 到 90% 之间)。那么任何随机堆栈样本暴露它的概率是 >= X。例如,如果 X 是 20%,那么如果你取 20 个样本(不管你取它们的速度有多慢),你会在其中大约 4 个样本上看到问题,这将告诉您要解决的问题。然后,重复。
  • 我不想手工做! ( ctrl-c 将在一段时间后被杀死)。我想通过脚本来做。使用脚本我会得到相当相似的结果,但是当手动工作时,我会得到非常不同的点。如果您无法帮助我使用 AUTOMATING gdb,请随时删除此答案。
【解决方案2】:

(1) 手动。在 shell 中执行以下操作。在 shell 提示符下不断按 Ctrl+C。

gdb -x print_callstack.gdb -p pid

或者,(2) 在另一个 shell 上重复向 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

【讨论】:

  • 替代方案是 pstack 或 gstack
  • SR Bandi,你能在手册中添加http链接吗(例如纯文本)?
【解决方案3】:
cat > gdb.run
set pagination 0 
backtrace 
continue 
backtrace 
continue 
... as many more backtrace + continue's as needed
backtrace 
continue 
detach 
quit

当然,省略重复的换行符,这个论坛软件中的单个换行符是怎么做的呢? :(

gdb -x gdb.run -p $pid

然后就用do

kill -INT $pid ; sleep 0.01

在另一个脚本的循环中。

kill -INT 是操作系统在您按下 ctrl-C 时所做的事情。读者练习:让 gdb 脚本使用具有 $n 次迭代的循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多