Печать в программе работает, но GDB сообщает «Не удается получить доступ к памяти по адресу …»

У меня есть следующий код:

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.

Почему это происходит?

0

Решение

Я не полностью объяснил весь фон. Область памяти, к которой я пытаюсь получить доступ, является областью mmap (), и GDB не может просматривать такие области. Следующее решение решение решает проблему: напишите функцию, которая печатает из региона, и вызовите эту функцию из GDB.

2

Другие решения


По вопросам рекламы [email protected]