Различия между MSVC ++ Debug и Release средой - PullRequest
0 голосов
/ 23 февраля 2012

В данный момент я имею дело с очень специфической проблемой: у меня есть приложение, которое полностью работает в Debug-Buildmode, независимо от того, запускаю ли я его из среды MSVC или запускаю встроенный исполняемый файл самостоятельно.Если я создаю это приложение в Release-Buildmode, оно полностью работает, когда я запускаю его из среды MSVC, но показывает неожиданное поведение, когда я запускаю его сам.

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

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

  • Чтение настроек из файла (не проблема, дважды проверил прочитанные значения и, конечно, использовал библиотеку inini и libconfig ++ -)
  • Распределить значения по отдельным классам (дважды проверил переданные значения)
  • Один из этих классов запускает поток (boost::thread) и запускает функции обратного вызова при определенных событиях (они НЕ запускаются, если сборка выпуска выполняется вручную)

Что-то, что я могу себе представить, может вызвать проблемы, но я не уверен в этом:

  • Поскольку классы были написаны разными людьми, существует несоответствие между использованием std::string и std::wstring.Я конвертирую из одного в другое, используя std::wstring(s.begin(), s.end()) и наоборот.

Может ли это быть причиной моих проблем, и если да, как мне решить проблему?Я был бы очень признателен за помощь в этом.Заранее спасибо.

Обновление:

  • Программа не аварийно завершает работу и кажется, что переменные не имеют разных значений при использовании печально известного метода print-debug(поскольку в отладчике все работает нормально)
  • Я прочитал, что причиной этой проблемы могут быть унифицированные переменные, и провел тройную проверку каждой используемой мной переменной, и каждая переменная инициализируется правильно
  • В модульных тестахкаждый модуль, который я использую, работает должным образом (хотя я не уверен, что каждый раз правильно определял границы, поскольку сам не написал все модули).

Обновление 2:

  • При постепенном отключении оптимизации и приближении режима сборки релиза к режиму сборки отладки я смог сузить проблему: ** На вкладке генерации кода моя программа работает с Multithreaded-Debug-DLL, а не Multithreaded-DLL, независимо от настроек оптимизации.

Кажется, это хорошее достижение, но мне не хватает пониманияего проблема.

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

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

1 голос
/ 23 февраля 2012

Добавьте ведение журнала или исключите некоторые блоки кода.Это должно позволить найти, где возникает проблема.Для различий смотрите здесь:

В чем разница между отладкой и выпуском в Visual Studio?

...