python - 访问核心转储中的 Python 对象

标签 python python-c-api postmortem-debugging

有没有办法从 gdb 的核心文件中发现 PyObject* 的 python 值

最佳答案

这是很多工作,但当然可以完成,特别是如果您拥有所有符号。查看特定版本的 Python 的头文件(以及用于构建它的编译选项):它们将 PyObject 定义为一个结构,其中首先包括一个指向类型的指针。使用了很多宏,因此您可能希望再次从源代码运行该 Python 的编译,使用完全相同的标志,但在预处理后添加 -E 停止,因此您可以引用生成这些位的特定 C 代码您在核心转储中看到。

一个类型对象有一个字符串(char 数组),这是它的名字,从它你可以推断出该类型的对象到底包含什么——直接包含内容,或者可能是一些内容(比如作为长度,即项目数)和指向实际数据的指针。

我已经做过几次这种 super 高级的事后调试(从非常精确地了解所涉及的 Python 版本和所有准备好的预处理源 &c 开始),每次都花了我一两天的时间(是我仍然是一名自由职业者,按小时收费,如果我必须竞标这样的任务,我会说至少 20 小时——以我不便宜的小时费率!-)。

IOW,只有当它真的是摆脱一些非常昂贵的泡菜的唯一方法时,它才值得。从好的方面来说,它会教给你更多关于 Python 的内部知识,比你想象的要多,即使在记住源代码的每一行之后。祝你好运,你需要一些!!!

关于python - 访问核心转储中的 Python 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1080832/

相关文章:

python - 为什么我的代码显示断言错误和值错误?

python - PyObject_GetItem 和 PyObject_SetItem 是否适用于 PyType_List 和 PyType_Dict 类型?

c++ - 在 GDB (C++) 中找到指向单例事后分析的指针

python - 使用 Python 分隔最后出现的数字的正则表达式

python - CherryPy - 静态文件的缓存

python - 我无法绘制以下数据 : (Precision-Recall curve)

python - 无法在 Windows 上安装 IMDbPY

python - 在 Linux 程序中嵌入 Python

crash - .Net 进程的自动故障转储

windows - 我可以将 windbg 用作 Windows 服务的事后调试器吗?