c++ - 在程序中打印有效,但 gdb 显示 "Cannot access memory at address ..."

标签 c++ c gdb gdbserver

我有以下代码:

struct A
{
  int fieldA;
  int fieldB;
};

A *a = (A *) ptr;

cout << a->fieldA; // Works fine
cout << a->fieldB; // Works fine

ptr 是一个指向内存中某处的 char * 对象。存储在内存中地址 ptr 的对象是一个 A 对象。该结构由另一个进程写入进程之间共享的内存中。在我有上述代码的过程中,共享内存是只读的。

正在远程目标上执行的程序。我使用 gdb-server 在目标上运行程序,并使用 gdb 从我的开发机器连接到服务器。

打印语句正确打印了预期值。但是,当我通过执行 p a->fieldA 从 gdb 打印结构的字段时,我得到“无法访问地址处的内存...”。这没有意义,因为我希望既然我的程序可以访问结构的内容,gdb 也应该如此。

为什么会这样?

最佳答案

我没有完全解释整个背景。我试图访问的内存区域是一个 mmap() 区域,gdb 无法查看此类区域。以下解决方案solution解决问题:编写一个从该区域打印的函数,并从 gdb 调用该函数。

关于c++ - 在程序中打印有效,但 gdb 显示 "Cannot access memory at address ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29686756/

相关文章:

c++ - 如何使用对话框参数?

C使用Queue的单链表

进程的 GDB 完整内存转储

c - 即使使用 RPC_C_AUTHN_NONE,Windows RPC 访问也被拒绝

c++ - vector.size() 的 GDB 错误值

scripting - 自动化 GDB 调试 session 的最佳方法是什么?

C#类库如何添加启动代码

c++ - QThread相关问题

c++ - 从类模板中排除类型

c++ - 为 Visual Studio 2010 设置 OpenCV-2.3