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中完成的,没有任何单独的比较脚本。
- 谢谢,我目前正在尝试python方法,它似乎工作得很好!!只是想知道如何知道函数边界已经到达。block.function != None是停止递归的正确方法吗?
- 是的,就是这样;虽然有一个折痕,那就是如果函数是内联的,您可能会看到一个非None函数。因此,有时您可能希望将漫游扩展到第一个非内联函数。