Добавление передачи в gcc?

Сначала добавьте файл .env в root и добавьте variable and value

.env содержимое файла

blockquote>
TIMEOUT=3000

Сейчас в вашем layout's code section добавьте этот код

blockquote>
function onStart()
{
    $this['env_timeout'] = env('TIMEOUT', '2000');
    // -----------  env var name - ^       ^ - default value    
}

enter image description here

Теперь в вашем layout's markup section добавьте это код

blockquote>

enter image description here

Теперь вы можете использовать его в любом месте в js, просто убедитесь, что вы Добавьте this script before your js file, чтобы переменная была доступна для js file

blockquote>

enter image description here

Если у вас возникнут какие-либо проблемы, пожалуйста, прокомментируйте .

8
задан LB40 9 April 2009 в 13:19
поделиться

6 ответов

Если вы все еще заинтересованы в добавлении пропуска GCC, вы можете начать читать вики-материал GCC примерно так:

4
ответ дан 5 December 2019 в 17:41
поделиться

Вам нужно использовать GCC? LLVM выглядит так, как будто будет работать. Он написан на C ++, и очень легко написать пропуск .

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

Это интересный вопрос. Я собираюсь рассмотреть концепции вокруг вопроса, а не отвечать на вопрос напрямую, потому что, ну, я не знаю так много о внутренностях gcc.

Вы, вероятно, уже исследовали некоторые манипуляции с исходным кодом на более высоком уровне, чтобы достичь того, чего вы хотите достичь; что-то вроде

int main(int argc, char ** argv) {
    return dbg(foo(argc));
}

, вставленное с макросом в функцию "foo", возможно. Однако, если вы ищете взлом компилятора, то, вероятно, вам не нужно изменять исходный код.

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

Сценарий GDB очень хорошо справился бы с выводом. отладка, но похоже, что у вас есть большие планы, чем просто выполнение printf. Внедрение в код важной логики, кажется, то, что вам нужно.

Это напоминает мне некоторые уловки динамического компоновщика, с которыми я недавно сталкивался. Библиотека , вставляющая , может вставлять код вокруг вызовов функций, не затрагивая исходный источник. Пример, с которым я столкнулся, был на Solaris, но, вероятно, есть аналог на других платформах.

Только что наткнулся на опцию -finstrument-functions, задокументированную здесь

-finstrument-functions

Генерировать вызовы инструментария для входа и выхода в функции. Сразу после функции entry и непосредственно перед выходом из функции будут вызваны следующие функции профилирования с адресом текущей функции и ее сайта вызова. (На некоторых платформах __builtin_return_address не работает за пределами текущей функции, поэтому сайт вызова в противном случае информация может быть недоступна для функций профилирования.)

          void __cyg_profile_func_enter (void *this_fn,
                                         void *call_site);
          void __cyg_profile_func_exit  (void *this_fn,
                                         void *call_site);

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

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

Чтобы ответить на ваш вопрос: gcc - довольно популярный платформа компилятора для исследования компилятора, так что да, я уверен, что кто-то это сделал.

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

Советы: не думайте, что люди читали другие ваши вопросы. Если вы хотите сослаться на вопрос, добавьте ссылку на него, если хотите, чтобы люди его нашли.

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

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

Звучит так, как будто вы больше ищете инструменты для отладки или профилирования, такие как gdb и его различные внешние интерфейсы (xgdb, ddd) и и gprof . Инструменты проверки памяти / границ, такие как электрический забор, утилита glibc memcheck , valgrind и mudflap , могут помочь, если это проблемы с памятью или указателем. Включение флагов компилятора для предупреждений и новых стандартов C может быть полезно -std = c99 -Wall -pedantic .

Я не могу понять, что вы подразумеваете под

У меня все еще есть та же проблема с вызов функции как раз перед возвращаясь от другого.

Так что я не уверен, что вы ищете. Можете ли вы привести пример тривиального или псевдокода?

Т.е.

#include <stdio.h>
void a(void) {
   b();
}
void b(void) {
   printf("Hello World\n");
}
int main(int ac, char *av[]) {
   a();
   return 0;
}
0
ответ дан 5 December 2019 в 17:41
поделиться

Для справки в будущем: в следующих версиях gcc (4.4.0+) будет поддержка плагинов , специально предназначенных для таких случаев использования, как добавление проходов оптимизации в компилятор без необходимости загружать весь компилятор.

6 мая 2009 г .: GCC теперь можно расширить с помощью общей инфраструктуры подключаемых модулей на хост-платформах, которые поддерживают динамически загружаемые объекты. (см. gcc.gnu.org )

3
ответ дан 5 December 2019 в 17:41
поделиться
Другие вопросы по тегам:

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