簡體   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