关于C#:GDB:如何获取所有局部变量的名称?

GDB : how can I get the name of all local variables?

gdb中有没有一种方法可以获取所有局部变量的名称?我知道。

本地信息

打印局部变量的名称和值,但我想在函数的几个执行点自动比较所有局部变量的值(这个函数中有大量的局部变量,因此手动逐个执行会很麻烦…)

谢谢!


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

一种低技术的方法是使用info locals来转储变量。您可以使用set logging工具将它们转储到一个文件中,通过设置一个断点,该断点的commands执行日志记录、转储、禁用日志记录,最后以continue结束,您可以完全自动化这一过程。

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

另一种方法是使用gdb的python脚本工具。在这里很容易得到局部变量:用gdb.selected_frame()得到所选的帧;然后得到帧的块(frame.block());然后迭代块的局部变量以得到该块的变量,并向上遍历块(参见gdb.Block.superblock),直到到达函数边界。

您可以计算或忽略找到的符号(例如,如果您只想比较一些子集)。并且,您可以决定如何比较收集的值。

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