Название: Нюансы сборки Отправлено: ksergey85 от Октябрь 02, 2014, 12:26 Здравствуйте.
Приложение состоит из нескольких проектов - основной проект и статические библиотеки. В одной из статических библиотек есть .cpp-модуль следующего содержания: Код: #include <QDir> Замысел в том, чтобы вызвать функцию init() сразу после загрузки программы в память (на этапе инициализации глобальных переменных). Замечу, что переменная inited нигде (ни в коде этой библиотеки, ни в коде других библиотек или основной программы) не используется. В итоге понял, что данный модуль в программный код после сборки прилоги просто не попадает, так как под отладчиком не срабатывают бряки ни на строке с объявлением переменной, ни на строках тела функции. После добавления в модуль любого кода, используемого за его пределами, переменная начинает "срабатывать". Все тесты проводил на отладочной (Debug) сборке. Вопрос: имеет ли здесь место какая то оптимизация и как ее отключить? Если нет, то в чем дело? Среда сборки: MSVS2013, версия Qt: 5.3.1. Название: Re: Нюансы сборки Отправлено: Bepec от Октябрь 02, 2014, 12:31 Да, это оптимизация. Отключить оптимизацию можно в настройках проекта (вкладка C/С++ -> Optimization вроде).
Если вы ставите точку остановки и она становится пустой - наведите на неё мышь и подождите подсказки. Там будет написана причина, по которой точка остановки неактивна. В вашем случае скорее всего будет написано что кода нет в исполняемом файле :) PS отключение оптимизации повлияет на всю программу, что может вызвать её замедление. Но на мой взгляд, если нет большой нагрузки, замедление будет незначительным. Название: Re: Нюансы сборки Отправлено: ksergey85 от Октябрь 02, 2014, 12:38 В итоговом варианте на релизной сборке оптимизация должна быть включена, поэтому отключить всю оптимизацию без разбора я не могу. Но в тестовой сборке у меня отключены все виды оптимизации как на уровне компилятора так и на уровне линковщика.
На несрабатывающем бряке пишет: "В настоящий момент попадание в точку останова не произойдет. Нет загруженных символов для этого документа." Название: Re: Нюансы сборки Отправлено: ksergey85 от Октябрь 02, 2014, 13:54 Почитал поподробнее о работе линкера и пришел к выводу, что дело не в оптимизации. Линкер рассматривает lib-файл как библиотеку объектных файлов, которые будут использованы, только при необходимости, т.е. только при наличии ссылок на объекты в этом файле. А так как ссылок нет, то и obj-файл не линкуется. Всем спасибо.
Название: Re: Нюансы сборки Отправлено: Bepec от Октябрь 02, 2014, 14:26 Как бы это и есть оптимизация, но видимо не отключаемая :)
|