Отладка и сборка выпуска в Visual Studio C ++ 2008 Win32 проблема времени выполнения - PullRequest
2 голосов
/ 01 апреля 2009

У меня есть простой прослушиватель udp, написанный на c ++ с использованием win32, когда я компилирую и запускаю программу в режиме отладки, она отлично работает, и я ясно вижу информацию из пакетов, которые я получаю. Когда я запускаю этот же код в виде сборки релиза, он прекрасно компилируется и, кажется, работает нормально, но не выводит никакой информации о пакете, как это было при сборке релиза. Я попытался отразить конфигурации сборки, чтобы точно соответствовать, но это все еще происходит. Любые предложения будут ценны.

Ответы [ 3 ]

1 голос
/ 01 апреля 2009

Скорее всего, это проблема не инициализации переменных к какому-либо начальному значению, поэтому при отладке они имеют какое-то значение, но при выпуске большинство вещей инициализируется нулем (NULL). Таким образом, может иметь место некоторое условие / ветвление, которого вы не ожидаете ... Без вашего исходного кода, например, ДЕЙСТВИТЕЛЬНО трудно обнаружить проблемы.

Это меня несколько раз укусило .. :)

Предполагается, что вы не ожидаете увидеть что-либо, использующее такие вещи, как OutputDebugString (), как Mehrdad Рекомендуется ...

Кроме того, убедитесь, что ваши пакеты имеют размер менее 1024 байт, иначе вы их НЕ получите. Мне потребовалось некоторое время, чтобы разобраться с этим, когда вышла XP, и я не мог понять, почему мой код работал на 2000, а не на XP ... Хотя send (sendto) вернул бы успех, он на самом деле никогда не отправлял пакет ..

В любом случае, я много работал с UDP на Win32, поэтому, если вы дадите мне пример кода, я смогу помочь больше ...

Но в любом случае, проверьте, что ВСЕ ваши переменные инициализированы как-то по умолчанию как для отправителя, так и для получателя (что является хорошей практикой), а затем пересоберите его и попробуйте снова. Кроме того, проверьте размер вашего пакета с помощью sizeof () перед его отправкой, и если он больше 1024 байт, не беспокойтесь ... Это также хорошая идея, чтобы проверить размер полученного пакета, и если это не совсем размер Вы ожидаете, тогда отбросьте пакет. Это относится БОЛЬШЕ к трансляциям, но все еще применяется.

Дайте мне знать, если что-то из этого помогло, я опубликовал много UDP-кода на еще один вопрос здесь некоторое время назад, и этот код работает, вы можете обратиться к нему.

1 голос
/ 01 апреля 2009

Код, который выводит отладочную информацию о пакетах, вероятно, удален из соображений производительности в сборке выпуска.

Это делается в основном двумя вещами:

  • условные директивы препроцессора, которые проверяют режим отладки и генерируют соответствующий код в этом режиме.
  • связывание с отладочной версией библиотек.

Отбрасывание этих вещей на самом деле является основной целью, которую вы создаете для релизной версии. Вам не понадобится информация для отладки, поэтому вы не будете жертвовать производительностью ради нее. Если вы действительно хотите это сделать, то почему бы вам просто не отправить обновление debug build [: как отмечается в комментарии, похоже, лицензия не позволяет вам распространять программное обеспечение, связанное с библиотеками отладки ]? Это самая похожая конфигурация (вы не можете получить больше конфигурации, чем идентичной, не так ли?)

0 голосов
/ 01 апреля 2009

Как именно вы печатаете информацию? Некоторые макросы, такие как TRACE, ничего не делают в сборках релиза.

Или, если вы печатаете с использованием fprintf или другого аналога, он не обязательно что-либо пишет, пока не вызовете fflush - отладочная версия может сделать это для вас чаще.

...