在核心转储中访问Python对象

时间:2009-07-03 21:07:31

标签: python python-c-api postmortem-debugging

无论如何都要从gdb

中的核心文件中发现PyObject *的python值

1 个答案:

答案 0 :(得分:4)

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

除了许多其他东西之外,类型对象还有一个字符串(char数组),它的名称,从中你可以推断出该类型的确切对象包含的内容 - 无论是直接内容,还是某些内容(如作为长度,即项目数量)和指向实际数据的指针。

我已经完成了几次超级高级的事后调试(从非常精确的Python版本知识和所有准备好的预处理源和c)开始,每次我花了一两天的时间(我仍然是一名自由职业者并按小时收费,如果我不得不竞标这样的任务,我会说至少20个小时 - 以我不便宜的小时费率! - 。)。

现在,只有当它真正成为一些非常昂贵的泡菜的唯一出路时才值得。从好的方面来说,它会告诉你更多关于Python内部的信息,比你想象的还要多,即使在记住每一行资源之后。祝你好运,你需要一些!!!