Наконец, я решу проблему, добавив пользовательский 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 таких ошибках, сообщения и ..., таким образом.
Я разместил это, возможно, помог кому-то:)
Если прагма не будет работать на Вас, попытайтесь разделить функцию на ее собственный файл и затем скомпилируйте тот файл без набора флага оптимизации.
Вы могли поместить функцию в отдельный файл и скомпилировать тот файл без оптимизации, но лучшее решение будет состоять в том, чтобы выяснить что не так с кодом и зафиксировать его.
Одна из наиболее распространенных ошибок, которая появляется, когда оптимизация включена с gcc, со строгим искажением. Удостоверьтесь, что все предупреждения включены и видят, получаете ли Вы какие-либо предупреждения, которые могли бы помочь Вам выяснить, какова проблема. Если Вы не можете понять это, попытайтесь уменьшить проблему до маленькой, полной программы и отправить ее здесь.
За исключением помещения функции в ее собственном файле, я не думаю, что существует любой способ выключить оптимизацию на функции функциональным уровнем с помощью более ранних версий GCC. Но вместо того, чтобы выключить оптимизацию для этой функции, Вы могли попытаться выбрать выключение определенных типов оптимизации в целой программе. При идентификации ошибки в этой конкретной функции это, вероятно, указывает на существование других неоткрытых ошибок.
, Поскольку другие указали, вероятно, что преступник является оптимизацией относительно 'строгое искажение' . В то время как в конечном счете, вероятно, необходимо исправить рассматриваемый код, вскоре Вы могли играть с добавлением '-fno-strict-aliasing' к Вашей командной строке. В-O2 и выше, компилятор делает определенные предположения о взаимодействиях между указателями. Добавление этой опции говорит этому не делать эти предположения.
, Если это перестало работать, и если по некоторым причинам код не может быть исправлен, Вы могли бы затем попытаться отключить другой опции .
оптимизацииЯ не могу сказать наверняка, но насколько я знаю, нет такой возможности. Однако оптимизация никогда не должна изменять семантику четко определенного кода. Единственная вещь, которая могла произойти здесь, состоит в том, что переменная встраивается или что порядок чтения-записи изменяется.
первое, и вероятно обе проблемы могут быть решены путем объявления переменной (переменных), включенной как volatile
, таким образом показа компилятора, которым никакие предположения о его содержании не должны быть сделаны, базирующимися только на процессе выполнения программы.
В ответах до сих пор не учитывались ключевые слова исходного вопроса, а именно «код микроконтроллера». Очень часто при написании такого кода с помощью для отключения оптимизации - агрессивные оптимизаторы будут "оптимизировать" целые операторы, чьи побочный эффект - управлять контроллером. Это другой мир, чем приложение кодирование. Для приложения в обычной сфере программирования я пришел сюда в поисках для той же информации, чтобы избежать процедуры суммирования Кахана (см. Википедию) оптимизирован в ничто. Так что не будем предполагать, что изменение уровня оптимизации создание другого поведения программы автоматически является признаком плохого кода. Что-то можно скрыть, используя ключевое слово volatile, а в некоторых случаях нужно сгенерировать реальный язык ассемблера и проверить его. (Я верю в это все еще можно сделать с помощью -S переключателя на gcc). Напомним, что C предназначен для своего рода переносной ассемблер, а не разновидность COBOL.
Дэйв
Я знаю, что это старое сообщение. На странице GCC, которую приводит OP, действительно говорится: Чтобы такие вызовы не оптимизировались, поместите asm (""); в функцию. Думаю, это простое обходное решение. Надеюсь, это может помочь другим людям, как я.