2010-12-14 11 views
1

Visual Studio 10でネイティブコードから例外がスローされました。デバッグ - >例外メニューですべての例外に対してスローを有効にしました。これは通常のC++のstd :: runtime_errorであり、SEHや管理例外はここには含まれていません。しかし、ランタイムはスローで壊れません。私は明示的にruntime_errorsを捕まえたにしても、それを捕まえません。彼らは最終的に管理された呼び出しコードによって捕らえられます。私はthrowステートメントの前にブレークポイントを置いていますが、どちらがスローされているのか知っていますが、どうして私はなぜそれを打ち破り、それをキャッチできないのか不思議です。MSVCで例外を破ることはできません

try { 
     //... 
     std::for_each(...) { 
      if (condition) { 
       std::stringstream str; 
       str << "Error: Unexpected end of file in file " << arg.first << "\n"; 
       str << "Unused tokens: \n"; 
       for(int i = 0; i < token_stack.size(); i++) { 
        auto ref = token_stack.top(); 
        str << " " << ref->contents << " at line " << ref->line << "\n"; 
        token_stack.pop(); 
       } 
       throw std::runtime_error(str.str()); 
      } 
     }); 
     //... 
    } 
    catch(const std::runtime_error& exception) { 
     std::cout << exception.what() << std::endl; 
     return; 
    } 

この機能は、最終的にマネージコードから呼び出されます。私はこのスローステートメントが投げていることを知っています。

+0

間違ったタグ? C++とC++の代わりにC++と.NETが必要ですか? –

+0

@Martin:問題はすべてネイティブコードで発生するため、いいえ。 – Puppy

+0

@DeadMG - それはまだマネージドアプリケーションのコンテキストにあり、C++ ** 0x **とは何の関係もありません。 –

答えて

0

あなたが暗示しているように管理されたappliactionの場合は、「混合モードのデバッグ」を有効にする必要があると思います。この関数でブレークポイントを設定できるかどうかチェックしましたか?

+0

申し訳ありませんが、私はスローコールの前にブレークポイントを置くことを暗示しました。そして、それが壊れたのでどちらがスローされているのか知っています。通常のブレークポイントは正常に動作し、私は混合モードのデバッグを行います。 – Puppy

関連する問題