Различия между запуском исполняемого файла с отладчиком Visual Studio и без отладчика

я пытаюсь отладить проблему, в которой исполняемый файл производит повторяемый вывод (который я хочу) при выполнении непосредственно из Visual Studio, но делаетне производить повторяемый вывод при выполнении из командной строки. Это'Это однопоточное приложение, поэтомуТам может быть какое-то странное поведение с точки зрения времени.

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

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

Вот окружающая среда и результаты:

Запустить непосредственно из командной строки (cmd): неповторяемый выводЗапуск из Visual Studio с отладкой (F5): повторяемый выводЗапуск из Visual Studio без отладки (Ctrl-F5): неповторяемый вывод

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

На основании этих результатов это выглядит как бег "с отладкой (даже в сборке релиза) как-то решает проблему. Указывает ли это на вероятного виновника? Каковы различия между запуском исполняемого файла с отладкой и без?

РЕШЕНИЕ: Как указано в принятом ответе, проблема была в куче отладки. Проблема заключалась в том, что в глубине нашего кода кто-то получал доступ к частям большого массива до их инициализации. Они выделили память с помощью malloc и не инициализировали ее до 0. Куча отладки будет (я предполагаю) заполнить массив некоторым повторяемым значением, тогда как когда отладчик не был 'Прилагается (т.е. при запуске из командной строки или с помощью Ctrl-F5) значения были более случайными и иногда вызывали крошечные отклонения в поведении программы. К сожалению, настройка была настолько тонкой, что почти незаметной, а память под вопросомбыло правильно сбросить после первогоРамка" обработки, но начальные условия уже немного отличались, и ущерб был нанесен. Теория хаоса в действии! Спасибо за руководство.

Один полезный совет по отладке, который помог: напишите пользовательский malloc, который немедленно заполняет память совершенно случайными данными. Таким образом, вы можете убедиться, что выправильно инициализируйте его перед использованием, иначе ваши результаты будут (надеюсь) сумасшедшими при каждом запуске - даже в режиме отладки с кучей отладки!

Ответы на вопрос(2)

Ваш ответ на вопрос