为什么 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 no
和set height 0
是一样的,所以你可以忘记set pagination no
部分。
set height 0
和 set width 0
关闭 gdb 显示换行到终端宽度的输出的任何尝试,并一次显示页面。
我希望每次 gdb 打印任何内容时,这种换行和一次输出一页都会导致大量额外处理。
pstack
脚本中没有太多与您的脚本不同的地方,所以我看不出还有什么不同。
我有一个脚本,它使用这样的命令文件运行 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 no
和set height 0
是一样的,所以你可以忘记set pagination no
部分。
set height 0
和 set width 0
关闭 gdb 显示换行到终端宽度的输出的任何尝试,并一次显示页面。
我希望每次 gdb 打印任何内容时,这种换行和一次输出一页都会导致大量额外处理。
pstack
脚本中没有太多与您的脚本不同的地方,所以我看不出还有什么不同。