基于GDB中的数据类型调用/调用不同的方法

时间:2015-12-15 04:52:49

标签: debugging gdb

我正在尝试在gdb中定义一个命令,它是一个包装器,它将根据传递给它的参数的数据类型调用各自的方法。 我尝试过像

这样的东西
set $datatype = whatis $arg0 

但它似乎不起作用。

我正在尝试写这样的东西

define gprint

    set $datatype = //somehow get the datatype of arg

    if $datatype == *type1
        p print_type1(*$arg0)
    end
    if $datatype == type1
        p print_type1($arg0)
    end
    if $datatype == type2
        p $arg0->print()
    end

    //
    //
    //  Some more datatypes
    //
    //

end

1 个答案:

答案 0 :(得分:1)

没有方便的方法从gdb命令行执行此操作,因为没有好办法将类型走私到表达式中。

可以使用“标准hack”以硬盘方式完成 - 使用“set logging”将类型写入文件,然后使用“shell”将文件重写为gdb脚本,然后“source”to加载该脚本。但是,这非常痛苦。

相反,使用Python要简单得多。这里有几种选择。

由于您似乎想要显示某些值因类型而异,我建议使用gdb“漂亮打印”功能。此功能专为此方案而设计。它与printbt和其他gdb命令很好地集成。

但是,如果你不这样做,而你仍然宁愿编写自己的gprint命令,那么你仍然可以选择:你可以完全用Python编写命令,它可以访问表达式和类型。或者,您可以编写符合您喜欢的Python便捷函数。您可以在my gdb-helpers repository中看到后者的示例;特别是看$_typeof函数。