Python自定义GDB会话:继承gdb.FrameDecorator报错原因解析
GDB Python框架装饰器继承错误解析
错误原因
当你写class MyFrameDecorator(gdb.FrameDecorator):时触发的TypeError,本质是误把模块当成类来继承:
gdb.FrameDecorator是GDB Python API中的一个模块,并非用于继承的基类;- Python尝试将模块作为父类初始化时,模块的构造逻辑参数不匹配,因此抛出"module() takes at most 2 arguments (3 given)"的错误。
为什么修改后能正常运行
gdb.FrameDecorator.FrameDecorator才是GDB提供的真正的框架装饰器基类——这个类被封装在同名的FrameDecorator模块内部,所以需要通过两层引用才能正确获取到该类,继承它才符合GDB的API要求。
GDB官方文档相关内容翻译
要实现自定义框架装饰器,需定义一个继承自gdb.FrameDecorator.FrameDecorator的类。你需要重写function、filename、line等必要方法,以此定制框架在回溯时的显示内容。框架装饰器可与框架过滤器配合使用,用于修改GDB展示的调用栈框架信息。
新手提示
Python中常见“模块名与模块内类名同名”的设计,比如标准库中的datetime.datetime(datetime是模块,内部的datetime是类),目的是让代码结构更清晰,遇到这类情况要注意区分模块和类的层级引用。
内容的提问来源于stack exchange,提问作者Lajos Nagy
相关产品推荐
相关产品推荐

