Что является хорошим способом отладки повреждения значения стека. В моей программе иногда адрес этого указателя изменяется после возврата метода, который завершает работу дескриптора файла. Я часами отлаживал программу, но не могу найти проблему.
Какой хороший способ узнать, что меняет адрес этого указателя? Когда я вручную добавляю часы на указатель this, ошибка не возникает. Ошибка по-прежнему возникает, когда я сокращаю свой код в максимально возможной степени. Я пробовал Valgrind, но он не находит раннего повреждения стека.
Мне удалось обнаружить, когда происходит ошибка, я скомпилировал код в 64-битном режиме. Адрес этого изменился с 0xxxxxxx до 0x1000000xxxxxxx. Я проверяю адрес этого в методах, где возникает ошибка, которую я узнал при изменении адреса (см. Первый параграф для этого).
Есть ли другой способ выяснить причину этой проблемы?
Вы можете попробовать адресно-дезинфицирующее. это доступно в gcc 4.8:
AddressSanitizer, быстрый детектор ошибок памяти, был добавлен и
можно включить через-fsanitize=address
, Инструкция по доступу к памяти
иметь инструменты для обнаружения переполнения кучи, стека и глобального буфера как
а также ошибки после использования. Чтобы получить более приятные трассировки стека, используйте
-fno-omit-frame-pointer
, AddressSanitizer доступен для IA-32 / x86-64 / x32 / PowerPC / PowerPC64 GNU / Linux и для x86-64 Darwin.
Других решений пока нет …