[英]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.