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

Print in program works but gdb says "Cannot access memory at address ..."

本文关键字:Cannot access memory address at 显示 gdb 程序 打印 有效      更新时间:2023-10-16

我有以下代码:

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()'d 区域,gdb 无法查看此类区域。 以下解决方案解决方案解决了该问题:编写一个从区域打印的函数,然后从 gdb 调用该函数。