我正在尝试在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
答案 0 :(得分:1)
没有方便的方法从gdb命令行执行此操作,因为没有好办法将类型走私到表达式中。
可以使用“标准hack”以硬盘方式完成 - 使用“set logging”将类型写入文件,然后使用“shell”将文件重写为gdb脚本,然后“source”to加载该脚本。但是,这非常痛苦。
相反,使用Python要简单得多。这里有几种选择。
由于您似乎想要显示某些值因类型而异,我建议使用gdb“漂亮打印”功能。此功能专为此方案而设计。它与print
,bt
和其他gdb命令很好地集成。
但是,如果你不这样做,而你仍然宁愿编写自己的gprint
命令,那么你仍然可以选择:你可以完全用Python编写命令,它可以访问表达式和类型。或者,您可以编写符合您喜欢的Python便捷函数。您可以在my gdb-helpers repository中看到后者的示例;特别是看$_typeof
函数。