Выключение оптимизации для определенной функции в gcc 4.2.2

Наконец, я решу проблему, добавив пользовательский HTTP Header. Как раз перед ответом для каждого запроса на стороне сервера, я добавляю текущий запрошенный url в заголовок ответа.

Мой тип приложения на сервере Asp.Net MVC, и у него есть хорошее место для этого. в Global.asax я реализовал событие Application_EndRequest так:

    public class MvcApplication : System.Web.HttpApplication
    {

    //  ...
    //  ...

        protected void Application_EndRequest(object sender, EventArgs e)
        {
            var app = (HttpApplication)sender;
            app.Context.Response.Headers.Add("CurrentUrl",app.Context. Request.CurrentExecutionFilePath);
        }

    }

Он отлично работает для меня! Теперь в каждом ответе JQuery $.post у меня есть запрошенные url, а также другие заголовки ответов, которые появляются в результате POST метода по статусу 302, 303, ....

, и многое другое важно, так как нет необходимости изменять код на стороне сервера или на стороне клиента.

, а следующая - возможность получить доступ к другой информации о post action таких ошибках, сообщения и ..., таким образом.

Я разместил это, возможно, помог кому-то:)

13
задан Jonathan Leffler 29 December 2008 в 20:04
поделиться

6 ответов

Если прагма не будет работать на Вас, попытайтесь разделить функцию на ее собственный файл и затем скомпилируйте тот файл без набора флага оптимизации.

12
ответ дан 1 December 2019 в 19:15
поделиться

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

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

7
ответ дан 1 December 2019 в 19:15
поделиться

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

, Поскольку другие указали, вероятно, что преступник является оптимизацией относительно 'строгое искажение' . В то время как в конечном счете, вероятно, необходимо исправить рассматриваемый код, вскоре Вы могли играть с добавлением '-fno-strict-aliasing' к Вашей командной строке. В-O2 и выше, компилятор делает определенные предположения о взаимодействиях между указателями. Добавление этой опции говорит этому не делать эти предположения.

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

оптимизации
5
ответ дан 1 December 2019 в 19:15
поделиться

Я не могу сказать наверняка, но насколько я знаю, нет такой возможности. Однако оптимизация никогда не должна изменять семантику четко определенного кода. Единственная вещь, которая могла произойти здесь, состоит в том, что переменная встраивается или что порядок чтения-записи изменяется.

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

3
ответ дан 1 December 2019 в 19:15
поделиться

В ответах до сих пор не учитывались ключевые слова исходного вопроса, а именно «код микроконтроллера». Очень часто при написании такого кода с помощью для отключения оптимизации - агрессивные оптимизаторы будут "оптимизировать" целые операторы, чьи побочный эффект - управлять контроллером. Это другой мир, чем приложение кодирование. Для приложения в обычной сфере программирования я пришел сюда в поисках для той же информации, чтобы избежать процедуры суммирования Кахана (см. Википедию) оптимизирован в ничто. Так что не будем предполагать, что изменение уровня оптимизации создание другого поведения программы автоматически является признаком плохого кода. Что-то можно скрыть, используя ключевое слово volatile, а в некоторых случаях нужно сгенерировать реальный язык ассемблера и проверить его. (Я верю в это все еще можно сделать с помощью -S переключателя на gcc). Напомним, что C предназначен для своего рода переносной ассемблер, а не разновидность COBOL.

Дэйв

5
ответ дан 1 December 2019 в 19:15
поделиться

Я знаю, что это старое сообщение. На странице GCC, которую приводит OP, действительно говорится: Чтобы такие вызовы не оптимизировались, поместите asm (""); в функцию. Думаю, это простое обходное решение. Надеюсь, это может помочь другим людям, как я.

3
ответ дан 1 December 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: