【发布时间】:2019-05-31 00:04:19
【问题描述】:
我有一个要检查的 Python 进程的核心转储。特别是,我对特定 Decimal 实例的值感兴趣。
我已将 Python 扩展加载到 gdb,特别是我正在使用 libpython.py distributed with Python 2.7。这提供了从 gdb 中对 Python 语言状态的某种程度的检查。值得注意的是,检查是基于为来自下级进程的对象重新创建一个“代理对象”,而这些代理对象是通过复制被检查对象的__dict__ 创建的。
不幸的是,带有__slots__ 的类的实例没有__dict__,因此.get_attr_dict() 返回None,因此Decimal 实例的属性似乎不费吹灰之力就可以检查。
此外,由于这是核心转储而不是实时进程,我不能简单地调用PyObject_GenericGetAttr。看来我唯一的选择是在 gdb 中手动遍历结构,直到获得值。
如何完成这样的人工检查?
【问题讨论】: