为什么 pstack 比仅附加、保存堆栈和退出的 gdb 快得多?

Why pstack is much faster than gdb with just attaching, saving stacks and quitting?

我有一个脚本,它使用这样的命令文件运行 gdb:

set logging file file_name
set logging on
thread apply all bt
q
y

为什么 pstack 比这个脚本快得多?我能以某种方式用 gdb 达到那种牢度吗?

编辑:区别在于 gdb 版本。我使用 gdb-7.10,转储堆栈跟踪大约需要 14 秒。使用 pstack 使用的 gdb 7.0.1,需要 2 秒。 gdb-7.10 大部分时间都花在了从我们的库中加载符号上,而我在新版本中找不到 -readnever 的合适选项。

在我的系统上至少 pstack 是一个 shell 脚本,它是 运行 的 gdb,所以你可能可以通过查看 运行 来准确地看到正在发生的事情pstack 可执行文件。

我怀疑脚本中有趣的部分可能是:

set width 0
set height 0
set pagination no

其实set pagination noset height 0是一样的,所以你可以忘记set pagination no部分。

set height 0set width 0 关闭 gdb 显示换行到终端宽度的输出的任何尝试,并一次显示页面。

我希望每次 gdb 打印任何内容时,这种换行和一次输出一页都会导致大量额外处理。

pstack 脚本中没有太多与您的脚本不同的地方,所以我看不出还有什么不同。