我有一个C ++方法,例如:
bool MyClass::Foo(char* charPointer)
{
return CallExternalAPIFunction(charPointer);
}
现在我在其他地方有一些静态方法,例如:
bool MyOtherClass::DoFoo(char* charPointer)
{
return _myClassObject.Foo(charPointer);
}
我的问题是我的代码在那时断开了。它不会退出应用程序或任何东西,它永远不会返回任何值。为了尝试找出问题,我使用Visual Studio 2010调试器逐步完成了代码,发现了一些奇怪的东西。
当我进入DoFoo
函数并将鼠标悬停在charPointer
上时,我实际上看到了它被调用的值(在这种情况下是一个IP地址字符串)。但是,当我进入Foo
并将鼠标悬停在charPointer
上时,没有任何内容显示,外部API函数调用永远不会返回(就像它刚刚过去一样)并且我的程序在调用{之后恢复执行{1}}。
我还尝试使用VS调试器的DoFoo
功能(以获取第一次机会异常),但它从未拾取任何内容。
这曾经发生在任何人身上吗?我做错了吗?
谢谢。
答案 0 :(得分:2)
您需要使用Debug设置构建项目。发布设置意味着启用了优化,并且优化使调试受到打击。
在没有优化的情况下,C ++代码中的语句与程序中的机器代码块之间存在非常密切的对应关系。程序速度较慢(通常要慢得多),但调试起来比较容易,因为你可以观察每个语句的作用。
优化器重新排序代码,消除变量,内联函数,展开循环,并执行各种其他操作以使程序快速运行。程序更快(通常更快),但调试起来要困难得多,因为C ++代码中的语句与机器代码中的指令之间的对应关系不再存在。