Это интересный вопрос. Я собираюсь обратиться к концепциям вокруг вопроса, а не отвечать на вопрос напрямую, потому что, ну, я не знаю так много о внутренностях gcc.
Вы, вероятно, уже изучили некоторые манипуляции с исходным кодом на более высоком уровне для достижения того, чего хотите достичь; какой-то
int main(int argc, char ** argv) {
return dbg(foo(argc));
}
вставлено с макросом на функцию "foo", возможно. Если вы ищете взлом компилятора, то, вероятно, вы не хотите изменять исходный код.
Здесь обсуждаются некоторые расширения gcc здесь , которые звучат немного как то, что вы собираетесь. Если у gcc есть что-то, что делает то, что вы хотите, это, вероятно, будет задокументировано в области документации C-language extensions . Я не смог найти ничего похожего на то, что вы описали, но, возможно, поскольку вы лучше понимаете, что ищете, вы лучше поймете, как его найти.
Сценарий GDB отлично справился бы с выводом отладки, но, похоже, у вас большие планы, чем просто выполнение printf. Похоже, вы хотите вставить в код значительную логику.
Что напоминает мне некоторые трюки с динамическими компоновщиками, с которыми я недавно сталкивался. Библиотека , вставляющая , может вставлять код вокруг вызовов функций, не затрагивая исходный источник. Пример, с которым я столкнулся, был на Solaris, но, вероятно, есть аналог на других платформах.
Только что наткнулся на заданную опцию -finstrument-functions здесь
-finstrument-функции
Генерация инструментария для входа и выхода из функций. Сразу после функции
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);
Но я думаю, это не сработает, потому что вы не можете изменить возвращаемое значение из функций профилирования.