Методы отладки стека
Я сталкиваюсь с повреждением стека, которое прерывается прямо перед возвращением wWinMain
функция.. кто-нибудь может предложить мне способ или несколько советов, как отладить повреждение стека? (желательно в winDbg)
Я знаю, что повреждение происходит в процедуре, которую я написал в masm для своей программы, но стек кажется нормальным в течение всей процедуры. rsp
Регистрация имеет все, что нужно в течение всего времени..
2 ответа
Выполните это по порядку:
- Компилируйте с предупреждением высокого уровня и исправьте большинство предупреждений
- Запустите анализ кода проекта и исправьте предупреждения, особенно те, которые говорят о буфере / массиве / стеке и т. Д.
- Если повреждение все еще не исправлено, уменьшите размер функции (закомментируйте верхнюю или нижнюю часть функции). Не просто
return
- буфер поврежденного стека все еще может быть выделен - комментирование исключит плохой стек из программного кода. - Рефакторинг
wWinMain
- разделить на подзадачи (функции). Одна из функций потерпит неудачу из-за стека, и вы обнаружите реальную проблему.
Хорошо, мне удалось отследить ошибку! Я переписал содержимое переменной по ошибке, переместив значение в qword ptr[rsp+20h], 20h(смещение) было слишком далеко, и оно переписало мою переменную HINSTANCE.:) Повреждение стека произошло вокруг переменной 'instance'. удалось отследить с помощью WinDbg хорошую практику.
спасибо всем ответчикам.