在程序中打印有效,但 gdb 显示"Cannot access memory at address ..."
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
对象。 该结构由内存中在进程之间共享的另一个进程写入。 在我有上述代码的过程中,共享内存是只读的。
在远程目标上执行的程序。 我使用 gdb-server 在目标上运行程序,并使用 gdb 从我的开发计算机连接到服务器。
打印语句正确打印预期值。 但是,当我通过执行p a->fieldA
从gdb打印结构的字段时,我得到"无法访问地址的内存..."。 这没有意义,因为我希望因为我的程序可以访问结构的内容,所以 gdb 也应该如此。
为什么会这样?
我没有完全解释整个背景。 我尝试访问的内存区域是一个 mmap()'d 区域,gdb 无法查看此类区域。 以下解决方案解决方案解决了该问题:编写一个从区域打印的函数,然后从 gdb 调用该函数。
相关文章:
- 赛通"Cannot take address of memoryview slice"
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- /usr/bin/ld: cannot find -lc++
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- Cannot find -lglad
- "Cannot find -l<directory>"错误 - CMake
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- Windows cannot find MinGW
- Visual Studio "fatal error LNK1104: cannot open file"未使用或包含的库
- "Cannot convert Python object argument to type '<typename>'" - 使用 Cython 包装 C++ 类时出错
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- SFINAE:"enable_if cannot be used to disable this declaration"
- 向量数组"Cannot access memory at address"
- 将数据添加到 CArray 会产生错误"cannot access private member declared in class 'CObject'"
- 在程序中打印有效,但 gdb 显示"Cannot access memory at address ..."
- 找到"cannot access private member declared in class 'QObject'"的根本原因
- MFC 设计器中的"Cannot access ActiveX Control type library"错误
- 仅当类具有导出链接时"cannot access private member'"错误
- 为什么在检查核心转储时进入 gdb "Cannot access memory at address 0x..."?