В данный момент я имею дело с очень специфической проблемой: у меня есть приложение, которое полностью работает в 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
, независимо от настроек оптимизации.
Кажется, это хорошее достижение, но мне не хватает пониманияего проблема.