У меня есть простой код:
#include "stdafx.h"#include <iostream>
void foo()
{
int* p = 0;
*p = 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << "123";
foo();
std::cout << "456";
return 0;
}
Отладка по умолчанию Настройки Visual Studio. Отладка -> Исключения -> Сбросить все.
Результат после запуска этого кода в конфигурации отладки — я получил исключение Необработанное исключение в 0x77d315de (ntdll.dll) в exc.exe: 0xC0000005: Место записи нарушения прав доступа 0x00000000.
VS открыть файл ostream, указатель остаться здесь:
_Ostr.setstate(_State);
return (_Ostr);
} <--
Трассировки стека:
ntdll.dll!_ZwRaiseException@12() + 0x12 bytes
ntdll.dll!_ZwRaiseException@12() + 0x12 bytes
exc.exe!std::operator<<<std::char_traits<char> >(std::basic_ostream<char,std::char_traits<char> > & _Ostr={...}, const char * _Val=0x00000000) Line 808 + 0xf bytes C++
> exc.exe!wmain(int argc=0x00000001, wchar_t * * argv=0x00164810) Line 14 C++
exc.exe!__tmainCRTStartup() Line 552 + 0x19 bytes C
exc.exe!wmainCRTStartup() Line 371 C
kernel32.dll!@BaseThreadInitThunk@12() + 0x12 bytes
ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes
ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes
Если я установил флажок «Брошенный» в Debug -> Win32 Exceptions -> C0000005 Visual Studio останавливается в нужном месте.
У моего коллеги такая же Visual Studio, Windows 7 x64 и такое же оборудование. Но его VS останавливается в нужном месте без изменения настроек исключения.
Что не так с настройками моей Visual Studio?
Самая большая проблема — поведение с исключениями .net тоже не типично. На данный момент в режиме отладки VS просто игнорирует практически все исключения. Похоже, у меня есть глобальный фильтр исключений, и все исключения были обработаны. Программа может запускаться и показывать диалоговое окно в режиме релиза Catel mvvm toolkit рассылает спам с исключениями о незарегистрированных исключениях модели и файловой системы.
Любые идеи, как я могу это исправить, не устанавливая флажок «Брошенный».
[РЕДАКТИРОВАТЬ]
Хорошо, я нашел что-то странное. После изменения Debug -> Exceptions я остановился на строке с исключением. Но если я нажму «Продолжить», я уйду в файл ostream. Похоже, отладчик VS нажмите «Продолжить» по умолчанию.
[РЕДАКТИРОВАТЬ]
First-chance exception at 0x012514cf in exc.exe: 0xC0000005: Access violation writing location 0x00000000.
Unhandled exception at 0x773515de (ntdll.dll) in exc.exe: 0xC0000005: Access violation writing location 0x00000000.
Вот что я вижу в выводе. Есть только одно исключение. Похоже, что исключение было обработано как-то, а затем было брошено позже в другом месте.
Обычный подозреваемый: .ncb
файл или .pdb
или что-то еще испорчено. Попробуйте стереть все локальные файлы (solutionname.suo
, solutionname.ncb
, projectname.anything.user
и все в промежуточных и выходных каталогах) и проверьте, помогает ли это что-нибудь.
Других решений пока нет …