Хороший способ отладки повреждения значения стека

Что является хорошим способом отладки повреждения значения стека. В моей программе иногда адрес этого указателя изменяется после возврата метода, который завершает работу дескриптора файла. Я часами отлаживал программу, но не могу найти проблему.

Какой хороший способ узнать, что меняет адрес этого указателя? Когда я вручную добавляю часы на указатель this, ошибка не возникает. Ошибка по-прежнему возникает, когда я сокращаю свой код в максимально возможной степени. Я пробовал Valgrind, но он не находит раннего повреждения стека.

Мне удалось обнаружить, когда происходит ошибка, я скомпилировал код в 64-битном режиме. Адрес этого изменился с 0xxxxxxx до 0x1000000xxxxxxx. Я проверяю адрес этого в методах, где возникает ошибка, которую я узнал при изменении адреса (см. Первый параграф для этого).

Есть ли другой способ выяснить причину этой проблемы?

4

Решение

Вы можете попробовать адресно-дезинфицирующее. это доступно в gcc 4.8:

AddressSanitizer, быстрый детектор ошибок памяти, был добавлен и
можно включить через -fsanitize=address, Инструкция по доступу к памяти
иметь инструменты для обнаружения переполнения кучи, стека и глобального буфера как
а также ошибки после использования. Чтобы получить более приятные трассировки стека, используйте
-fno-omit-frame-pointer, AddressSanitizer доступен для IA-32 / x86-64 / x32 / PowerPC / PowerPC64 GNU / Linux и для x86-64 Darwin.

3

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

Других решений пока нет …

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