64-разрядная версия Windows 7, Visual Studio 2010, консольное приложение C ++, конфигурация отладки Win32:
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { char* p = NULL; *p = 1; return 0; }
Начать отладку. Очевидно, я получаю сообщение об ошибке:
Unhandled exception at 0x77d915de in test.exe: 0xC0000005: Access violation writing location 0x00000000.
Я выбираю Debug и вижу следующий стек:
ntdll.dll!77d915de() [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] ntdll.dll!77d915de() ntdll.dll!77d8014e() msvcr100d.dll!_heap_alloc_dbg_impl(unsigned int nSize, int nBlockUse, const char * szFileName, int nLine, int * errno_tmp) Line 504 + 0xc bytes C++ >ffffffff()
Отладчик прерывается на __finally
строке в dbgheap.c. Стек поврежден, в стеке отсутствует строка *p = 1
. Окно вывода:
'test.exe': Loaded 'C:\tmp\test\Debug\test.exe', Symbols loaded. 'test.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file 'test.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file 'test.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file 'test.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded. First-chance exception at 0x010f13a8 in test.exe: 0xC0000005: Access violation writing location 0x00000000. Unhandled exception at 0x77d915de in test.exe: 0xC0000005: Access violation writing location 0x00000000.
Теперь, если я запускаю ту же программу в конфигурации отладки x64, все в порядке - отладчик прерывается на строке *p = 1
. Как правильно отладить программу Win32?