Visual Studio - отладка и выпуск - PullRequest
15 голосов
/ 29 июня 2010

Я создал службу Windows, предназначенную для .NET 2.0 в VS 2008. Я запускаю ее как консольное приложение для отладки.

Консольное приложение работает отлично.Я поставил его на свой локальный компьютер как сервис, скомпилированный в режиме отладки, все еще прекрасно работает.Я готов к выпуску сейчас, и внезапно, когда я переключаю его в режим выпуска, сервис компилируется и устанавливается, но ничего не происходит.(Никакой код в сервисе не работает вообще).

Я понимаю, что режим выпуска или отладки - это настройки конфигурации свойств, но кажется, что в режиме выпуска, даже когда я проверяю определение константы DEBUG, снимите флажок Оптимизировать код,и установите отладочную информацию в 'full', она по-прежнему ничего не делает.

Верните его в режим отладки, и он снова будет работать как шарм.

(В качестве sidenote я попытался сбросить целевую платформу до 3.5, чтобы убедиться, что это тоже не проблема)

Итак, мои вопросы (в порядке важности) таковы:

  1. Будет ли когда-либо вызывать какие-либо проблемы при использовании моей "отладочной" версии?

  2. Какие параметры отличаются между отладкой и выпуском, кроме трех IВы уже пытались измениться?

  3. Это кажется мне странной ошибкой и пробудило мое любопытство.Любая идея, что может вызвать это?

РЕДАКТИРОВАТЬ: Следует упомянуть, я уже использую пользовательский установщик.Обычно я компилирую программу (в режиме отладки или выпуска), а затем устанавливаю ее с помощью соответствующего установщика.

Ответы [ 2 ]

17 голосов
/ 29 июня 2010

1) Возможно, если не прямо, то косвенно, если приложение будет работать медленнее и использовать больше памяти.

2) Когда он работает в режиме отладки, некоторые вещи работают по-другому, например:

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

  • Инструкции могут быть перегруппированы в режиме выпуска, но не в режиме отладки, так что код может быть пошаговым, и результат будет соответствовать точному порядку исходного кода.

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

  • Исключения содержат больше информации и обрабатываются намного дольше при выдаче.

Все эти различия относительно невелики, но это фактические различия, и в некоторых случаях они могут иметь значение.

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

3) Что касается проблемы с вашим сервисом, я не знаю, но, похоже, это не связано с тем, как код выполняется в режиме отладки или в режиме выпуска. Код запускается в любом случае, и если это проблема с кодом, он падает, и вы сможете увидеть его в журнале событий.

0 голосов
/ 29 июня 2010

Я не уверен, что могу говорить с # 1 или # 2, но когда у меня возникли подобные проблемы, это было из-за неправильного потока / параллелизма . Я не уверен, насколько велико ваше приложение, но это может быть хорошим началом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...