基于局部变量存在的GDB流量控制

Rob*_*Rob 5 c c++ gdb

我正在尝试编写一个GDB脚本(遗留,而不是Python),它将打印有关局部变量(C或C++结构)成员的信息,但前提是该局部变量存在.就像是:

# 'magic' should be evaluate to "if 'info locals' has a variable named foo, then
# evaluate to true, otherwise evaluate to false.
if (magic)
    print foo->member
end
Run Code Online (Sandbox Code Playgroud)

我知道这有点人为,因为本地人依赖于堆栈框架(所以我可能最好不要让它以框架为条件),但我仍然想知道沿着这些线条是否有可能.

Tom*_*mey 2

首先——Python 在这类事情上要优越得多。这就是我们将其添加到 gdb 的原因!

然而,这仍然可以使用较旧的 gdb 来完成。然而,这很糟糕,在完成之后我想你会更加欣赏 Python 方法。您要做的是:首先,使用各种“设置日志记录”命令将输出重定向到临时文件。然后使用 gdb 命令打印您需要的信息,在本例中类似于“info local”。然后,使用“shell”命令将临时文件重写为一个文件,该文件本身就是一个gdb脚本。例如,使用“sed”来检测输出中是否存在该变量,然后发出“set $var_exists=1”。最后,“获取”此脚本的结果并测试设置的便利变量。

呃。但它有效。