Некорректная отладка программы Win32 на 64-битной ОС

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?


person Alex F    schedule 13.12.2012    source источник


Ответы (1)


Отладка-> Исключения-> win32 Exception-> c0000005 установите флажок в столбце «Выброшено» или в столбце «Выброшено» для всех исключений Win32 http://msdn.microsoft.com/en-us/library/038tzxdw(v=vs.100).aspx

*p = 1; 
00041375 mov eax,dword ptr [p]
00041378 mov byte ptr [eax],1

Исключение первого шанса на 0x00041378 в test2.exe: 0xC0000005: место записи нарушения прав доступа 0x00000000

person sergmat    schedule 13.12.2012
comment
Спасибо, это помогло. Интересно, почему он работал без этого изменения для x64? - person Alex F; 13.12.2012
comment
вероятно, по замыслу команда разработчиков Visual Studio Debugger Team должна знать сайт подключения для Visual Studio - person sergmat; 13.12.2012