有没有办法从 gdb 的核心文件中发现 PyObject* 的 python 值
最佳答案
这是很多工作,但当然可以完成,特别是如果您拥有所有符号。查看特定版本的 Python 的头文件(以及用于构建它的编译选项):它们将 PyObject 定义为一个结构,其中首先包括一个指向类型的指针。使用了很多宏,因此您可能希望再次从源代码运行该 Python 的编译,使用完全相同的标志,但在预处理后添加 -E 停止,因此您可以引用生成这些位的特定 C 代码您在核心转储中看到。
一个类型对象有一个字符串(char 数组),这是它的名字,从它你可以推断出该类型的对象到底包含什么——直接包含内容,或者可能是一些内容(比如作为长度,即项目数)和指向实际数据的指针。
我已经做过几次这种 super 高级的事后调试(从非常精确地了解所涉及的 Python 版本和所有准备好的预处理源 &c 开始),每次都花了我一两天的时间(是我仍然是一名自由职业者,按小时收费,如果我必须竞标这样的任务,我会说至少 20 小时——以我不便宜的小时费率!-)。
IOW,只有当它真的是摆脱一些非常昂贵的泡菜的唯一方法时,它才值得。从好的方面来说,它会教给你更多关于 Python 的内部知识,比你想象的要多,即使在记住源代码的每一行之后。祝你好运,你需要一些!!!
关于python - 访问核心转储中的 Python 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1080832/