У меня есть следующий код:
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-сервер, и подключаюсь к серверу с моей машины разработки, используя gdb.
Операторы печати правильно печатают ожидаемое значение. Тем не менее, когда я печатаю поля структуры из GDB, выполнив p a->fieldA
, Я получаю «Невозможно получить доступ к памяти по адресу …». Это не имеет смысла, потому что я ожидаю, что, поскольку моя программа может получить доступ к содержимому структуры, то же самое следует сделать с GDB.
Почему это происходит?
Я не полностью объяснил весь фон. Область памяти, к которой я пытаюсь получить доступ, является областью mmap (), и GDB не может просматривать такие области. Следующее решение решение решает проблему: напишите функцию, которая печатает из региона, и вызовите эту функцию из GDB.