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 ★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.