GDB интерпретирует адрес памяти как объект - PullRequest
14 голосов
/ 21 марта 2011

Я расследую сбой, основываясь на доступном дампе ядра.Сбой приложения - это программа C ++, созданная с помощью gcc и работающая на RH5.Обратный след кажется действительным до кадра № 1.Там, пытаясь напечатать объект, я получаю <invalid address>, <error reading variable> Поскольку у меня есть адрес объекта из фрейма # 2, это допустимое предположение, что я могу каким-то образом «сбросить» память, в которой выделен объект, и все же собрать некоторую информацию.Кроме того, вместо того, чтобы пытаться угадать, как объект выровнен, я могу заставить gdb напечатать адрес, как если бы он был объектом, даже если он обнаруживает какую-то ошибку.Моя идея в том, что, возможно, объект уже удален, но, может быть, память все еще там, и я могу напечатать некоторую переменную-член.

Пожалуйста, прокомментируйте, возможно ли это, и если да, то как это должно быть сделано в терминах GDB.10x.

1 Ответ

19 голосов
/ 21 марта 2011

Ну, если у вас есть адрес, который вы всегда можете сделать:

print *(class MyClass*)pointer_var

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...