【发布时间】:2022-11-16 12:45:13
【问题描述】:
我有一个 gdb python 宏遍历 c 生成的核心文件中的数据。 宏可能需要很长时间才能运行。它遍历结构指针列表,将每个指针读入 gdb.Value。大部分时间花在访问该结构中的第一条数据时。这是由于 gdb.Value 具有的惰性特性。
IE。
gdb_val = other_structure['pointer']
if gdb_val['data1']: <-- Majority of the time spent here
do_stuff
return
if gdb_val['data2']: <-- This is faster because the data is already loaded
do_other_stuff
我尝试通过偏移量使用更“直接”访问该数据来访问 data1,但这实际上减慢了宏的速度。
我相信我已经用尽了 python/gdb 的选择。如果我错了,请告诉我。
有没有其他方法可以更快地分析核心文件?
即编写一个将遍历数据的 c 库?我试着用谷歌搜索,但我只找到关于如何分析 c 核心文件的教程。我希望只是我缺乏 google 技能,并且存在类似的东西。 (我看过一些示例代码,其中 python 加载了一个 c 库来解析数据。但是该数据已传递到库中。我还没有看到 c 可以直接访问 gdb 或核心二进制数据的示例)
【问题讨论】:
-
“很长一段时间”是多长时间?有问题的结构的大小是多少?可执行文件/调试信息的大小是多少?实时调试时是否也会发生延迟,或者仅使用核心文件?我们有什么办法可以重现这个问题吗?