我從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++和.NET而不是C++ 0x? – 2010-12-15 07:08:25
@Martin:不,因爲所有的問題都出現在本地代碼中。 – Puppy 2010-12-15 10:03:02
@DeadMG - 是的,但它仍然在託管應用程序的上下文中,並且與C++ ** 0x **無關。 – 2010-12-15 10:31:40