我有一个核心文件和二进制文件 (C++)。问题是,在使用 gdb 分析核心文件时,如果我尝试打印一个指针,它会打印出内存地址。一旦我尝试打印该指针的原始上下文,它就会说:
You can't do that without a process to debug.
这是一个例子:
(gdb) p objPtr
(gdb) $1 = {px = 0x12345678}
(gdb) p *objPtr
(gdb) You can't do this without a process to debug.
事实上,这是有道理的,因为核心文件不是那个二进制文件的进程。但是核心文件应该存储二进制崩溃时的状态,我认为应该有一种方法可以从我们所说的指针获取原始上下文。
我对编写 Python 脚本来处理这个问题做了一些研究。但首先,如果我们不能在 gdb 中执行这样的 p *ptr
,我的 Python 脚本如何从该内存地址获取对象?
任何引用资料或 github 项目都会有所帮助。
更新:
我发现我可以做一个:
(gdb) p *ptr.px
解决我上面遇到的问题。
但现在我的问题变成了如果我想编写一个有助于在 GDB 中进行调试的脚本,如何在 Python 脚本中获取 .px
。
最佳答案
其实自己找答案。
由于 objPtr 在我的示例中是一个指针,因此调用类似 *objPtr
的内容被视为调用该指针的函数/方法。正确的方法是p *objPtr.px
。
关于python - 如何通过python从GDB中的内存地址获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25515303/