【问题标题】:Flow control in GDB based on local variable existenceGDB中基于局部变量存在的流控制
【发布时间】:2014-04-01 08:52:09
【问题描述】:

我正在尝试编写一个 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

我知道这有点做作,因为本地人依赖于堆栈框架(所以我可能最好让它以框架为条件),但我仍然想知道这些方面是否可行.

【问题讨论】:

    标签: c++ c gdb


    【解决方案1】:

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

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

    哎呀。但它有效。

    【讨论】:

    • 谢谢汤姆!我之前放弃了 Python 脚本,因为我无法让模块 gdb 和 python-2.6gdb.py 在我的平台上很好地运行 (docs.python.org/devguide/gdb.html),所以我认为现在坚持使用遗留脚本更容易。回想起来,我好像把婴儿和洗澡水一起扔了出去,所以我肯定会再给 Python 一个机会。
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    相关资源
    最近更新 更多