2010-12-14 65 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++和.NET而不是C++ 0x? – 2010-12-15 07:08:25

+0

@Martin:不,因爲所有的問題都出現在本地代碼中。 – Puppy 2010-12-15 10:03:02

+0

@DeadMG - 是的,但它仍然在託管應用程序的上下文中,並且與C++ ** 0x **無關。 – 2010-12-15 10:31:40

回答

0

如果這是您似乎暗示的託管應用程序,那麼我認爲您需要啓用「混合模式調試」。你有沒有檢查過,如果你可以在這個函數中設置斷點?

+0

對不起,這意味着我在投擲電話之前放了一個斷點,我知道哪一個投擲是因爲它打破了。常規的斷點工作正常,我有混合模式調試。 – Puppy 2010-12-15 10:03:43