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

时间:2014-04-01 08:52:09

标签: 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

我知道这有些做作,因为当地人依赖于堆叠框架(所以我最好不要让它以框架为条件),但我仍然想知道是否有什么东西这些线是可能的。

1 个答案:

答案 0 :(得分:1)

首先 - Python对于这种事情来说远非优越。这就是我们将它添加到gdb的原因!

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

好恶。但它确实有效。