Мой код работает в режиме отладки, но не в режиме выпуска

StackOverflow https://stackoverflow.com/questions/2923599

Вопрос

У меня есть код в Visual Studio 2008 в C ++, который работает с файлами, просто Fopen и FPLOSE. Все работает идеально в режиме отладки. И я проверил с несколькими наборами набора данных. Но это не работает в режиме выпуска. Это вылетает все время. Я выключил все оптимизации, а также не зависит от чего-либо (в линкер), а также я установил эти:

Оптимизация: отключена (/ od) сохранять неразрешенные данные. Не удаляйте избыточный оптимизировать для Windows98: нет

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

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

Я ценю любую помощь. --Нима

Это было полезно?

Решение

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

Другие советы

1) Двойная проверка любого и всякий код, который зависит от препроцессора макросов.
2) Используйте Assert () для проверки предварительных условий состояния программы. Не следует ожидать, что они должны повлиять на поток программы (т. Е. Удаление проверки все равно позволит коду обеспечить тот же конечный результат), потому что Assert - это макрос. Используйте регулярные условные занятия, когда утверждение не будет делать.
3) Действительно, никогда не оставляйте переменную в неинициализированном состоянии.

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

Я испытал это и в моем случае именно из-за одного из моих массив структуры, который должен иметь только X-индекс, но мой цикл, проверяющий эту структуру, был преодолен для проверки на индекс x + 1. Интересный режим отладки работал нормально, хотя я был на Visual C ++ 2005.

Я провел несколько часов, надевая PrintF в мою линию кодирования по линии, чтобы поймать ошибку. У кого-нибудь есть хороший способ отладить эту ошибку, пожалуйста, дайте мне знать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top