gdb中有没有办法获取所有局部变量的名称?我知道
信息本地
打印局部变量的名称和值,但我想在函数的多个执行点自动比较所有本地的值(并且此函数中有大量的局部变量,所以手动执行一个接一个将是乏味的...)
谢谢!
答案 0 :(得分:4)
听起来你真的想要在两个时间点比较一些当地人。有几种方法可以做到这一点。
一种低技术方法是使用info locals
转储变量。您可以使用set logging
工具将它们转储到文件中,并且可以通过设置commands
进行日志记录,转储,禁用日志记录,最后以{{1结尾 - 的断点来完全自动执行此操作。 }}
在这种方法中,您可以编写一个单独的脚本来比较结果。
另一种方法是使用gdb的Python脚本工具。在这里获取局部变量很容易:使用continue
获取所选框架;然后得到帧的块(gdb.selected_frame()
);然后迭代块的局部来获得该块的变量,然后向上走(见frame.block()
)直到达到函数边界。
您可以评估或忽略您找到的符号(例如,您只想比较某些子集)。而且,您可以决定如何比较收集的值。
在这种方法中,所有工作都在gdb中完成,没有任何单独的比较脚本。