У меня возникло исключение из нативного кода в Visual Studio 10. Я включил прерывание при броске для всех исключений в меню отладки-> исключений.Это обычный C ++ std :: runtime_error, здесь нет никаких SEH или управляемых исключений.Но время выполнения не сломается на броске.Это также не поймает их - даже если я явно перехватил runtime_errors, так как я их выбрасываю.Они наконец пойманы управляемым кодом вызова.Я ставлю точку останова перед оператором throw, и я знаю, какой из них выбрасывает и почему, но все еще не понимает, почему я не могу его сломать или перехватить.
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;
}
Функция в конце концов вызывается изуправляемый код.Я знаю, что это оператор броска - один бросок.