繁体   English   中英

在程序中打印可以正常工作,但是gdb表示“无法访问地址…”

[英]Print in program works but gdb says “Cannot access memory at address …”

我有以下代码:

struct A
{
  int fieldA;
  int fieldB;
};

A *a = (A *) ptr;

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

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

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

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

为什么会这样呢?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM