Почему передача char * этому методу не удалась? - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть метод 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.

Я также пытался использовать функцию Exception... в отладчике VS (для получения исключений первого шанса), но он никогда ничего не обнаруживал.

Случалось ли это с кем-нибудь? Я что-то не так делаю?

Спасибо.

1 Ответ

2 голосов
/ 19 апреля 2011

Вам необходимо собрать проект с настройками Debug. Настройки выпуска означают, что оптимизации включены, а оптимизация делает отладку лучше.

Без оптимизации существует очень тесное соответствие между операторами в вашем коде C ++ и блоками машинного кода в программе. Программа медленнее (часто гораздо медленнее), но ее легче отлаживать, потому что вы можете наблюдать за тем, что делает каждый оператор.

Оптимизатор переупорядочивает ваш код, исключает переменные, встроенные функции, развертывает циклы и выполняет множество других действий, чтобы сделать программу быстрой. Программа работает быстрее (часто намного быстрее), но ее гораздо сложнее отлаживать, поскольку соответствия между операторами в вашем коде C ++ и инструкциями в машинном коде больше нет.

...