我遇到了一个相当奇怪的行为,我甚至不知道如何开始描述。 我写了一段托管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