在Python中,我有一个类型为gdb.Value的变量“var”,它对应于一个C++结构体。该结构有一个方法“void foo()”。 我可以评估这个表达式“var ['foo']”。但“var ['foo']()”会抱怨说RuntimeError:值不可调用(不是TYPE_CODE_FUNC)。我相信值类型将是gdb.TYPE_CODE_METHOD(不确定,但var ['foo']。type.code返回16)在我的情况。所以我想问题是python API支持对类方法的调用,如果没有,是否有解决方法?谢谢!gdb python api:是否可以调用类/结构体方法
2
A
回答
2
好的,我想我能够使用汤姆的建议和另一种解决方法来做我想做的事。我需要一个额外的解决方法的问题是(正如我在上面的评论中提到的),我没有变量名称来组成一个形式的字符串:“myval.method()”传递给gdb.parse_and_eval。因此,解决方法是获取变量的地址,然后将其转换为该类型,然后向该字符串添加方法调用。 gdb.Value的python api中都有类型和地址。所以解决方案如下所示:
eval_string = "(*("+str(self.val.type)+"*)("+str(self.val.address)+")).method()"
return gdb.parse_and_eval(eval_string);
1
这只是一个没有人实现的缺失功能。您可能会看到它是否在bugzilla中,如果没有,请提交bug。
一个典型的解决方法是将“this”参数的值替换为字符串,并通过gdb.parse_and_eval进行调用。这通常有效,但当然明显是次佳。
相关问题
- 1. 是否可以在结构体上调用put_in调用?
- 2. 是否可以在回调方法中使用reset()API方法?
- 3. 是否可以从Application类的Activity类中调用方法?
- 4. 是否可以通过make()来调用结构构造函数?
- 5. 是否可以从C程序中调用python方法?
- 6. 是否可以从抽象类中调用方法?
- 7. 是否可以通过异步管道调用类方法
- 8. 检查,看是否可以调用来自API的方法调用前
- 9. SystemVerilog结构的个体变量是否可以用++递增?
- 10. 是否可以在ASP.NET MVC中使用n层体系结构?
- 11. 是否可以使用gdb库?
- 12. 是否可以从Java调用COM API?
- 13. 是否可以拦截Documentum API调用?
- 14. 是否可以从Open Tools API调用重构?
- 15. 是否可以在非异步方法中调用awaitable方法?
- 16. 是否可以从已有主方法的类调用main方法?
- 17. 调用没有结构的python类方法
- 18. 是否可以确定实例方法是否在原型方法中调用?
- 19. 是否可以使用GDB对Python进行反向调试?怎么样?
- 20. Python:是否可以向Tuple类添加新方法
- 21. 是否有Delphi 6的实用程序可以分析类层次结构并可以查询方法祖先?
- 22. 是否可以使用gdb通过ssh远程调试?
- 23. 是类还是结构体
- 24. 我如何可以调用变量方法在结构
- 25. 第三方API调用的Web应用程序体系结构
- 26. 在onDestroy之后是否可以调用回调方法?
- 27. PHP类的结构,是否使用静态方法?
- 28. 是否可以设置混合体系结构群集?
- 29. 是否可以禁用隐式构造函数方法/调用的注入?
- 30. 是否可以确定pthread_t结构是否未使用?
Tom,谢谢你的回应。我想尝试你建议的解决方法,但这是我的问题。我使用python api进行漂亮的打印。在我注册漂亮打印的类中,我只会得到ctor中变量的值,而我没有变量名,除非gdb.Value具有它,否则我不认为。在下面的std :: string示例中,“val”是gdb.Value,而不是可用的变量名称,对吗? 类StdStringPrinter(对象): “打印的std :: string” DEF __init __(个体,VAL): self.val = VAL DEF to_string(个体): 返回self.val [ '_ M_dataplus'] [” _M_p'] – aayupov
这是一个非常类似的bugzilla请求供我们参考:[link](https://sourceware.org/bugzilla/show_bug.cgi?id=13326) – aayupov