C++. Сборник рецептов - [40]

Шрифт
Интервал

C++Builder не поддерживает множественных конфигураций для одного проекта, но он предоставляет простой способ создания отладочной сборки. Чтобы запросить отладочную сборку, перейдите в Project Options→Compiler и нажмите на Full debug (полная отладка). Это отключит все оптимизации и встраивание и включит отладочную информацию.

При использовании IDE, которая не предоставляет готовых отладочной и окончательной конфигураций, такой как Dev-C++, или если вам требуется получить дополнительный контроль над параметрами проекта, обратитесь к таблицам с 1.23 до 1.25.


Табл. 1.23. Отключение оптимизаций из IDE

IDEКонфигурация
Visual C++На страницах свойств проекта перейдите к Configuration Properties→C/C++→Optimization и установите опцию Optimization в значение Disabled (отключено). Для остальных опций на этой странице оставьте значения по умолчанию
CodeWarriorВ окне Target Settings перейдите к Code Generation→Global Optimizations (генерация кода→глобальная оптимизация) и выберите Off (выкл)
C++BuilderВ Project Options перейдите к Compiler, в разделе Code optimization (оптимизация кода) выберите None
Dev-C++В Project Options перейдите к Compiler→Optimization и установите опцию Perform a number of minor optimizations (выполнить несколько незначительных оптимизаций) в значение No (нет), затем перейдите к Compiler→Optimization→Further optimizations (дополнительные оптимизации) и установите опции Optimize (оптимизировать), Optimize more (дополнительно оптимизировать) и Best Optimization (наилучшая оптимизация) в значение No

Табл. 1.24. Отключение встраивания из IDE

IDEКонфигурация
Visual C++На страницах свойств проекта перейдите к Configuration Properties→C/C++→Optimization и установите опцию Inline Function Expansion (расширение встраиваемых функций) в значение Default (по умолчанию)
CodeWarriorВ окне Target Settings перейдите к Language Settings→C/C++ Language и установите Inline Depth (глубина встраивания) в значение Don't Inline (не встраивать)
C++BuilderВ Project Options перейдите к Compiler и в разделе Debugging установите флажок Disable inline expansions (отключить встраивание функций)
Dev-C++См. запись для GCC в табл. 1.20 и обратитесь к рецепту 1.20

Табл. 1.25. Включение отладочной информации в IDE

IDEКонфигурация
Visual C++См. табл. 1.22
CodeWarriorВ окне Target Settings перейдите к Language Settings→Linker→PPC Mac OS X Linker и установите флажки Generate SYM File (генерировать SYM-файл) и Full Path in SYM Files (полные пути в SYM-файлах)
C++BuilderВ Project Options перейдите к Compiler и установите флажки Debug information и Line Number Information (информация о номерах строк)
Dev-C++См. запись для GCC в табл. 1.21 и обратитесь к рецепту 1.20
Обсуждение

Все наборы инструментов предоставляют опции для генерации в объектных и исполняемых файлах информации, которая позволяет отладчикам сообщать полезные данные при пошаговом выполнении программы. Эта информация обычно включает имена исходных файлов и номера строк, соответствующих определенному объекту или инструкциям машинного кода, а также информацию об объектах С++, занимающих определенные области памяти, включая их имена и типы.

Большинство наборов инструментов сохраняют отладочную информацию непосредственно в объектных и исполняемых файлах, но некоторые также предоставляют опцию для генерации отладочной информации в отдельных файлах базы данных. Например, в Visual C++ опция компилятора -Z7 указывает, что отладочная информация должна быть помещена в объектные и исполняемые файлы, а опции -Zi и -ZI указывают, что она должна быть сохранена в файлах базы данных программы, имеющих расширение .pdb. Опция -ZI включает функцию, которая называется Edit and Continue (отредактировать и продолжить), которая позволяет пользователям IDE изменять и перекомпилировать код, не прерывая сессии отладки. Аналогично CodeWarrior для Mac OS X по умолчанию генерирует отладочную информацию в файлах .SYM.

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

По этим причинам обычно при создании отладочной сборки принято отключать оптимизации и встраивание.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

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