为什么传递一个char*给这个方法失败?

Why is passing a char* to this method failing?

本文关键字:方法 失败 char 一个 为什么      更新时间:2023-10-16

我有一个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...功能(捡起第一次机会异常),但它从未捡起任何东西。

这种事发生过吗?我做错了什么吗?

谢谢。

您需要使用Debug设置构建项目。发布设置意味着启用了优化,而优化使调试变得轻松。

如果没有优化,c++代码中的语句和程序中的机器码块之间的对应关系非常密切。程序比较慢(通常要慢得多),但是调试起来比较容易,因为可以观察到每条语句的操作。

优化器重新排序你的代码,消除变量,内联函数,展开循环,并做各种各样的其他事情来使程序更快。程序更快(通常快得多),但调试起来要困难得多,因为c++代码中的语句和机器码中的指令之间不再存在对应关系。