私は簡単なコードを持っています:
#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 のデフォルトのデバッグ設定。デバッグ -> 例外 -> すべてリセット。
デバッグ構成でこのコードを実行した後の結果 - exc.exe の 0x77d315de (ntdll.dll) で例外未処理の例外が発生しました: 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
デバッグで「スロー」チェックボックスを設定すると、-> Win32 Exceptions -> C0000005 Visual Studio が適切な場所で停止します。
私の同僚は、同じ Visual Studio、Windows 7 x64、および同じハードウェアを使用しています。しかし、彼の VS は例外設定を変更せずに適切な場所で停止します。
Visual Studio の設定の何が問題になっていますか?
最大の問題 - .net 例外の動作も一般的ではありません。現時点では、VS はデバッグ モードでほとんどすべての例外を無視します。グローバル例外フィルターがあり、すべての例外が処理されたようです。リリース モードでプログラムを実行し、ダイアログを表示できます Catel mvvm ツールキットは、登録されていないモデルとファイル システムの例外に関する例外を私にスパムで返します。
「スロー」チェックボックスを設定せずに修正するにはどうすればよいですか。
[編集]
わかりました、私は奇妙なものを見つけました。Debug -> Exceptions を変更した後、例外のある行で停止しました。しかし、Continue を押すと、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.
それが出力に表示されるものです。唯一の例外があります。例外が何らかの形で処理されたように見え、後で別の場所にスローされました。