GDB:我怎样才能获得所有局部变量的名称?

时间:2016-04-06 12:31:03

标签: c gdb

gdb中有没有办法获取所有局部变量的名称?我知道

信息本地

打印局部变量的名称和值,但我想在函数的多个执行点自动比较所有本地的值(并且此函数中有大量的局部变量,所以手动执行一个接一个将是乏味的...)

谢谢!

1 个答案:

答案 0 :(得分:4)

听起来你真的想要在两个时间点比较一些当地人。有几种方法可以做到这一点。

一种低技术方法是使用info locals转储变量。您可以使用set logging工具将它们转储到文件中,并且可以通过设置commands进行日志记录,转储,禁用日志记录,最后以{{1结尾 - 的断点来完全自动执行此操作。 }}

在这种方法中,您可以编写一个单独的脚本来比较结果。

另一种方法是使用gdb的Python脚本工具。在这里获取局部变量很容易:使用continue获取所选框架;然后得到帧的块(gdb.selected_frame());然后迭代块的局部来获得该块的变量,然后向上走(见frame.block())直到达到函数边界。

您可以评估或忽略您找到的符号(例如,您只想比较某些子集)。而且,您可以决定如何比较收集的值。

在这种方法中,所有工作都在gdb中完成,没有任何单独的比较脚本。