У меня есть программа, которая работает только при компиляции с определенной версией gcc и с использованием некоторой оптимизации (-O1
или выше, но не -O0
).
Эта программа некорректна в смысле C, но тем не менее мне нужно понять, почему она не работает с -O0. Он слишком велик, чтобы его можно было проверить вручную путем сравнения сгенерированных ассемблерных кодов, поэтому я бы хотел, чтобы GCC сообщил мне точные флаги, соответствующие выполнению, скажем, -O1, но без использования самого -O1. Идея в том, что, удаляя каждую оптимизацию по одной, я смогу лучше понять проблему.
Я перешел на свою страницу параметров оптимизации gcc. и попытался добавить все параметры -f
, которые, согласно документу, включаются -O1, но этого недостаточно (программа по-прежнему ведет себя как -O0).
Есть ли способ получить какую-то нормализованную командную строку на основе опций «нижнего уровня» -f*
, которые соответствуют тому, что GCC делает внутри?
-O1 -fno-*
, возможно, некоторых-fdisable-*
, но я все еще не верю, что это вам сильно поможет. - person Marc Glisse   schedule 20.06.2016-O
, нужно как-то понять, поэтому, думаю, мне придется исправить сам gcc, чтобы получить дополнительную информацию. - person anol   schedule 21.06.2016