gdb python api:是否可以调用类/ struct方法

问题描述 投票:5回答:2

在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是否支持对类方法的调用,如果没有,是否有解决方法?

谢谢!

python gdb pretty-print
2个回答
6
投票

好吧,我想我能够用汤姆的建议和另一种解决方法做我想做的事。

我需要一个额外的解决方法的问题是(正如我在上面的评论中提到的)我没有变量名来组成一个形式的字符串: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);

2
投票

这只是一个没人实施的缺失功能。您可能会看到它是否在bugzilla中,如果没有,则提交错误。

典型的解决方法是将“this”参数的值替换为字符串,并通过gdb.parse_and_eval进行调用。这通常有效,但当然是明显次优的。

© www.soinside.com 2019 - 2024. All rights reserved.