LINUX.ORG.RU

Где доступно прочитать об основных режимах сборки C++ программ: release, debug, оптимизации, отладочные символы и т.п.


0

3

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

Вот на эту тему хочется чего-нибудь доступного почитать.

Платформы: линукс, gcc, gdb, винда, вижуал студия.

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

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

emulek
()

Невозможно сопоставить конкретные строки кода или названия функций с тем, что происходит в программе, т.к. оптимизатор всё сурово перефигачил.

Дебажишь код с -O2? Ти зробив мені день, бро.

nanoolinux ★★★★
()
Ответ на: комментарий от emulek

А нормальный не быдлокод с -O2 работает точно также, как и с -O0, только быстрее

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

vova7890 ★★★
()

Я делаю обычно так, думаю из названий понятно где что:

if(CMAKE_COMPILER_IS_GNUCXX)
    set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -fmax-errors=3")
    set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3")
    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g3")
    set(CMAKE_CXX_FLAGS_RELEASE "-O2")
endif(CMAKE_COMPILER_IS_GNUCXX)

m0rph ★★★★★
()
Последнее исправление: m0rph (всего исправлений: 1)
Ответ на: комментарий от vova7890

А нормальный не быдлокод с -O2 работает точно также, как и с -O0, только быстрее

Нормальному коду -O2 нужен лишь для удобства, когда тебе влом делать что-то вручную

привет одмин локалхоста. Внезапно: я вот не знаю, на КАКОМ железе будет выполняться мой код. Вот ты не поверишь: у меня даже локолхостов пять штук. И все разные.

emulek
()
Ответ на: комментарий от emulek

Привет одмин локалхостов. Внезапно, я говорил про читаемость кода, а не специфичные для платформы оптимизации. Но если речь пошла об этом, в узких местах, если оптимизация отличает в зависимости от архитектуры, я делаю её для 3х ведущих платформ.

vova7890 ★★★
()

Использую для дебага fprintf / printf. Поэтому в моем случае debug и release сборки отлючаются лишь ключиком -DEBUG (которого в release нет).

А насчет степеней оптимизации, иной раз с -O3 так начудишь, что долго пытаешься понять, почему у тебя вместо нормальных результатов программа хрень какую-то выдает. А все из-за оптимизации, точнее — глупости своей, когда ты не запихнешь нужный участок в правильную #pragma.

Кстати, ты еще не писал под микроконтроллеры: там часто нужно другую опцию указывать — -Os, т.к. время выполнения некритично, а вот размер кода — очень даже.

Anon
()
Ответ на: комментарий от vova7890

Нормальному коду -O2 нужен лишь для удобства, когда тебе влом делать что-то вручную

я говорил про читаемость кода

интересно: что ты там «вручную» повышаешь «читаемость»?

emulek
()
Ответ на: комментарий от vova7890

Но если речь пошла об этом, в узких местах, если оптимизация отличает в зависимости от архитектуры, я делаю её для 3х ведущих платформ.

не пойму, ты Бабушкин или Попов? Залогинся жеж...

emulek
()
Ответ на: комментарий от Anon

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

O3 - это суровая челябинская оптимизация, я слышал что её надо бояться, но O2 - необходимая в реальной жизни.

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

ХЗ, я обычно -O3 пользую или -Os для микроконтроллеров.

Anon
()
Ответ на: комментарий от emulek

Если не слышала о развертывании циклов, константных значениях в циклах, и прочих элементарных вещах которые с -O2 компилятор превращает в то, что задумал программист. Или ты Ъ и разворачиваешь циклики вручную? Если ты об этом не знаешь, о чем мне с тобой говорить?

vova7890 ★★★
()
Ответ на: комментарий от vova7890

Если не слышала о развертывании циклов, константных значениях в циклах, и прочих элементарных вещах которые с -O2 компилятор превращает в то, что задумал программист.

Или ты Ъ и разворачиваешь циклики вручную?

я Ъ, и НЕ разворачиваю циклы вручную. Это за меня делает компилятор. Внезапно: на каких-то платформах это выгодно, а на каких-то НЕ выгодно.

Если ты об этом не знаешь, о чем мне с тобой говорить?

не о чём. Я не лошадь(зелёная), что-бы учить тебя жизни.

emulek
()
Ответ на: комментарий от emulek

я Ъ, и НЕ разворачиваю циклы вручную

А я, блин, разворачивал. И охренел, что развернутый вручную цикл процентов на 15 быстрей работает, чем неразвернутый. А все из-за отсутствия лишних проверок. Опция -O3 так не умеет.

Anon
()
Ответ на: комментарий от emulek

Ололо, и на каких-же платформах это не выгодно, если конечная цель - скорость выполнения?

что-бы учить тебя жизни.

учитель, вы оказывается учите здесь всех жить. Как же далеко тебя носит.

vova7890 ★★★
()
Ответ на: комментарий от vova7890

А я, блин, разворачивал. И охренел, что развернутый вручную цикл процентов на 15 быстрей работает, чем неразвернутый. А все из-за отсутствия лишних проверок. Опция -O3 так не умеет.

это только на твоём локалхосте и только твой хэлловорлд.

Ололо, и на каких-же платформах это не выгодно, если конечная цель - скорость выполнения?

ВНЕЗАПНО: x86. Если код цикла слишком большой, он просто не поместится в кеш. Особенно это заметно, если нужно выполнять не только этот процесс.

учитель, вы оказывается учите здесь всех жить. Как же далеко тебя носит.

не. Не буду. Сам поймёшь, как подрастёшь.

emulek
()
Ответ на: комментарий от emulek

это только на твоём локалхосте и только твой хэлловорлд.

раззуй глаза

ВНЕЗАПНО: x86

если ты надумал разворачивать цикл обработки битмапа 1920x1080, то тут как бы ссзб. Касается не только х86, так что мимо ;)

vova7890 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.