Если это только для Вашего источника, что Вы хотите получить/изменить вызовы, простое решение состоит в том, чтобы соединить заголовочный файл (intercept.h
) с:
#ifdef INTERCEPT
#define getObjectName(x) myGetObectName(x)
#endif
и реализация функция следующим образом (в intercept.c
, который не делает , включают intercept.h
):
const char *myGetObjectName (object *anObject) {
if (anObject == NULL)
return "(null)";
else
return getObjectName(anObject);
}
Тогда удостоверяются каждый исходный файл, где Вы хотите прервать вызов, имеет:
#include "intercept.h"
наверху.
Затем то, когда Вы компилируете с" -DINTERCEPT
", все файлы вызовут Вашу функцию, а не реальную и Вашу функцию, может все еще назвать реальный.
Компиляция без" -DINTERCEPT
" будет препятствовать тому, чтобы перехват произошел.
Это немного более хитро, если Вы хотите прервать все вызовы (не только те, которые из Вашего источника) - это может обычно делаться с динамической загрузкой и разрешением реальной функции (с dlload-
и dlsym-
вызовы типа), но я не думаю, что это необходимо в Вашем случае.