Почесывая голову здесь: у меня есть приложение, которое прекрасно работает в Debug + Release, если оно запущено из Visual Studio 2010, как в режиме отладки, так и в режиме «Выполнить без отладки». Если я запускаю одно и то же приложение из командной строки с одинаковыми настройками, я вижу другое поведение. В частности, код, который работает по-другому:
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 такие же, выгрузка их в файл после того, как цикл показывает, что те же данные были записаны. Перемещение цикла вверх и вниз в этом фрагменте кода не помогает; Также нельзя изменить авто на справку List :: const_iterator.
Есть идеи, с чего начать отладку?
[Update] Отключение оптимизаций для этой функции не исправляет ее для Release, но я могу прикрепить отладчик и увидеть, что все там работает, как ожидалось. Тем не менее, я не понимаю правильное поведение программы. Stills работает также с «Запустить без отладки» и «Запустить с отладкой».