我遇到了一個相當奇怪的行爲,我甚至不知道如何開始描述。 我寫了一段託管C++代碼,可以調用本地方法。爲什麼在不進行優化的情況下調試託管C++時,VS2005會跳過執行行?
A(非常)簡化了代碼看起來像這樣的版本(我知道它看起來像一個完整的原生功能,只承擔有管理的東西被全部完成過的地方):
int somefunction(ptrHolder x)
{
// the accessptr method returns a native pointer
if (x.accessptr() != nullptr) // I tried this with nullptr, NULL, 0)
{
try
{
x->doSomeNativeVeryImportantStuff(); // or whatever, doesn't matter
}
catch (SomeCustomExceptionClass &)
{
return 0;
}
}
SomeOtherNativeClass::doStaticMagic();
return 1;
}
我編譯這段代碼時沒有使用/ clr標誌(VS.NET 2005,SP2)進行優化,並且在調試器中運行它時,我得到了if語句,因爲指針實際上是空的,我不輸入if,但令人驚訝的是,光標直接跳轉到return 1語句,完全忽略doStaticMagic()方法!!!
查看彙編代碼時,我發現它確實直接跳轉到該行。 如果我強制調試器輸入if塊,我也按F10後跳到返回1語句。
任何想法爲什麼會發生這種情況?
感謝, 林依晨
你說得對。託管C++在引發異常並且未處理異常時執行異常行爲,執行跳轉到最後一個返回行,在調試器中看起來令人困惑。 – Sakin 2010-05-11 12:23:53