У меня есть голова здесь: у меня есть приложение, которое отлично работает в Debug + Release, если оно начато с Visual Studio 2010, как в Debug, так и «Run without Debugging». Если я запускаю одно и то же приложение из командной строки с теми же настройками, я вижу другое поведение. В частности, код, который работает по-разному является:Различные действия, выполняемые из командной строки в «Запуск без отладки»
const List& vl = nDesc.Get<List> ("slots");
int index = 0;
for (auto it = vl.begin(), end = vl.end(); it != end; ++it)
{
desc.units [index++] = Parse (Tree (*it));
// If I access it again here, e.g.
// Log::Info (std::distance (vl.begin(), it))
// this works always
}
Я бы предположил, что это состояние гонки, но код полностью однопоточный. Интересно, что добавление некоторого случайного кода не делает его работу (т. Е. Просто вести запись строки недостаточно). О, и этот цикл запускается только один раз, когда-либо.
Данные в desc одинаковы, сбрасывая их в файл после того, как цикл показывает, что те же данные были записаны. Перемещение цикла вверх и вниз вокруг этого фрагмента кода не помогает; также не меняет auto на List :: const_iterator.
Любые идеи, с которых начать отладку?
[Обновить] Отключение оптимизаций этой функции не устраняет ее для выпуска, но я могу приложить отладчик и увидеть, что все работает там, как ожидалось. Но я не получаю правильное поведение программы. Stills работает с «Run without Debugging» и «Run with Debug».
Если начать он без отладки и прикрепления отладчика позже появляется ошибка? –
Да, похоже. Интересно, посмотрим, поможет ли это. – Anteru
Это не обязательно имеет отношение к этому коду - это может быть еще что-то переписывающее память, используемая этим кодом. Самая большая разница в cmd vs VS - это окружение, путь и командная строка args - проверьте эти –