3

私は簡単なコードを持っています:

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

それが出力に表示されるものです。唯一の例外があります。例外が何らかの形で処理されたように見え、後で別の場所にスローされました。

4

1 に答える 1

0

通常の容疑者:.ncbファイル.pdbまたは何かが破損しています。すべてのローカル ファイル ( solutionname.suosolutionname.ncbprojectname.anything.user、および中間ディレクトリと出力ディレクトリ内のすべて) を消去してみて、何か役立つかどうかを確認してください。

于 2012-10-03T18:14:31.523 に答える