Автоматический запуск кода в начале каждой функции C - PullRequest
4 голосов
/ 13 декабря 2011

У меня почти такой же вопрос, как и Как добавить код при вводе каждой функции? , но для C :

Поскольку я поддерживаю чей-то большой недокументированный проект, я хочу, чтобы код был похож на

static C0UNT_identifier_not_used_anywhere_else = 0;
printf("%s%s:%d#%d", __func__, strrchr(__FILE__,'/'), __LINE__, ++C0UNT_identifier_not_used_anywhere_else);

для запуска при вводе каждой функции, чтобы я

  1. есть журнал того, что называет что, и
  2. может сказать, на каком n th вызове функции, которую она ломает.

Существующий код содержит сотни исходных файлов, поэтому невозможно добавить макрос, например,

#define ENTRY_CODE ...
...
int function() {
  ENTRY_CODE
  ...
}

в каждой функции. Я также не использую DevStudio, Visual Studio или другой компилятор, предоставляющий __cyg_profile_func_enter или подобные расширения.

При желании я хотел бы напечатать возвращаемое значение каждой функции при выходе в похожем стиле. Могу ли я сделать это тоже?

1 Ответ

9 голосов
/ 13 декабря 2011

Поскольку вы пометили gcc, он имеет опцию -finstrument-functions:

Генерирует вызовы инструментария для входа и выхода в функции....

...