фатальный: дерево записи мерзавца: ошибка, создающая деревья

Если это только для Вашего источника, что Вы хотите получить/изменить вызовы, простое решение состоит в том, чтобы соединить заголовочный файл (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- вызовы типа), но я не думаю, что это необходимо в Вашем случае.

18
задан Community 23 May 2017 в 12:09
поделиться