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;
}
この機能は、最終的にマネージコードから呼び出されます。私はこのスローステートメントが投げていることを知っています。
間違ったタグ? C++とC++の代わりにC++と.NETが必要ですか? –
@Martin:問題はすべてネイティブコードで発生するため、いいえ。 – Puppy
@DeadMG - それはまだマネージドアプリケーションのコンテキストにあり、C++ ** 0x **とは何の関係もありません。 –