Визуальная студия показывает неправильное местоположение для SEH Exception

У меня есть простой код:

#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.

Вот что я вижу в выводе. Есть только одно исключение. Похоже, что исключение было обработано как-то, а затем было брошено позже в другом месте.

1 ответ

Обычный подозреваемый: .ncb файл или .pdb или что-то еще испорчено. Попробуйте стереть все локальные файлы (названиерешения.suo, имя решения.ncbимя проекта.user и все в промежуточных и выходных каталогах) и проверьте, помогает ли это что-нибудь.

Другие вопросы по тегам