在Python中,我有一个var
类型的变量gdb.Value
,它对应于C ++结构。
该结构有一个方法void foo()
。
我可以评估这个表达式var['foo']
。但var['foo']\()
会抱怨说
RuntimeError: Value is not callable (not TYPE_CODE_FUNC)
我认为值类型将是gdb.TYPE_CODE_METHOD
(不确定,但var['foo'].type.code
返回16
)在我的情况下。
所以我想问题是:
python API是否支持对类方法的调用,如果没有,是否有解决方法?
谢谢!
好吧,我想我能够用汤姆的建议和另一种解决方法做我想做的事。
我需要一个额外的解决方法的问题是(正如我在上面的评论中提到的)我没有变量名来组成一个形式的字符串:myval.method()
传递给gdb.parse_and_eval
。
因此,该方法的解决方法是获取变量的地址,然后将其转换为类型,然后向该字符串添加方法调用。
python api中的类型和地址都存在于gdb.Value中。所以解决方案如下所示:
eval_string = "(*("+str(self.val.type)+"*)("+str(self.val.address)+")).method()"
return gdb.parse_and_eval(eval_string);
这只是一个没人实施的缺失功能。您可能会看到它是否在bugzilla中,如果没有,则提交错误。
典型的解决方法是将“this”参数的值替换为字符串,并通过gdb.parse_and_eval进行调用。这通常有效,但当然是明显次优的。