我有一个 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 函数调用永远不会返回(就像它刚刚跨过)并且我的程序恢复它是在调用 DoFoo
之后执行。
我还尝试使用 VS 调试器的 Exception...
功能(以获取第一次机会异常),但它从未获取任何东西。
有人遇到过这种情况吗?我做错了什么吗?
谢谢。
最佳答案
您需要使用调试设置来构建项目。发布设置意味着启用了优化,而优化使调试变得轻而易举。
如果不进行优化,C++ 代码中的语句与程序中的机器代码块之间的对应关系非常密切。该程序速度较慢(通常慢得多)但更容易调试,因为您可以观察每个语句的作用。
优化器会重新排序您的代码、消除变量、内联函数、展开循环,并执行各种其他操作以加快程序速度。该程序更快(通常快得多)但调试起来要困难得多,因为 C++ 代码中的语句与机器代码中的指令之间的对应关系不再存在。
关于c++ - 为什么将 char* 传递给此方法会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5720167/