python - 如何通过python从GDB中的内存地址获取对象

标签 python c++ memory gdb core-file

我有一个核心文件和二进制文件 (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/

相关文章:

python - 如何在 Python 中获取 %APPDATA% 目录的路径?

python - 在一张图上绘制具有相同驱动强度的两个解决方案

C++ 静态属性

c++ - 我可以有条件地使用超过 1 个参数吗?

c++ - bazel c++ 创建并链接共享库

windows - VMMap 如何知道给定的内存区域是线程堆栈,具体来说?

python - 如何使用 Python win32com 中的所有默认加载项运行 excel

python - SQLAlchemy ORM : safely passing objects between threads without manually reattaching?

java - Java 是否使用字符串实现享元设计模式?

C++/SDL 内存管理