我在Visual Studio 10中从本机代码抛出异常。我已在debug->例外菜单中为所有异常启用了break in throw。它是常规的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;
}
最终从托管代码调用该函数。我知道这个抛出的声明是投掷的。
答案 0 :(得分:0)
如果这是您似乎暗示的托管应用程序,那么我认为您需要启用“混合模式调试”。您是否检查过是否可以在此功能中设置断点?