#c #debugging
#c #отладка
Вопрос:
Очень простой вопрос. Я хочу отладить версию выпуска моего exe-файла. Моя отладочная версия работает нормально. Но выпуск версии завершается сбоем, как обычно.
Любой инструмент или отладчик, доступный для этого, был бы отличным подспорьем.
Комментарии:
1. Какой вариант C вы используете? GC, VC или что-нибудь еще?
2. Вам необходимо указать, какую ОС, архитектуру, компилятор и т.д. вы используете.
3. @Paul R: exe, вероятно, означает MSVC.
4. @Alexandre C.: возможно, вы правы, но иногда люди говорят «exe» как сокращение от «исполняемого файла» на любой платформе, и в любом случае нам действительно не нужно гадать.
5. Я часто обнаруживал, что ошибки, связанные только с выпуском (тьфу, я ненавижу «режим отладки» против «режима выпуска» .. в компиляторах такого нет!), могут быть связаны с ошибками синхронизации. Ваш код выполняется медленнее с отключенной оптимизацией, что дает время для завершения или изменения чего-либо, но это не тот случай, когда выполняется ваш быстрый оптимизированный исполняемый файл. Прекрасным примером является то, что вы ошибаетесь
srand()
при каждом тике, и ваша отладкаstd::cout
замедляет все, так что похоже , что вы получаете правильную случайную последовательность. При оптимизации вы просто видите одно и то же число снова и снова.
Ответ №1:
Вы все еще можете включить отладочную информацию в режиме выпуска и использовать отладчик как обычно. Здесь нет ничего особенного, за исключением того, что порядок инструкций иногда будет выглядеть странно при отладке из-за оптимизации.
Удачи, отладка ошибок только в режиме выпуска утомительна.
Комментарии:
1. также в режиме выпуска отладчик, скорее всего, перейдет или не захочет перейти к большому количеству исходных текстов, поскольку он был оптимизирован настолько сильно, что результирующая сборка, похоже, больше не имеет много общего с исходным кодом
Ответ №2:
Я бы порекомендовал вам добавить какую-нибудь систему ведения журнала или точки трассировки, чтобы определить источник сбоя. Отладчик может обмануть вас при отладке выпуска. Вы также можете повысить уровень предупреждения вашего компилятора, чтобы увидеть некоторые обычные подозрения, такие как использование неинициализированных переменных.
Ответ №3:
Я рекомендую вам запустить exe с помощью какого-нибудь отладчика памяти, такого как Rational Purify или BoundsChecker. Он обнаружит ошибки, связанные с памятью, в вашем коде, если таковые имеются.