【发布时间】:2020-10-31 20:33:57
【问题描述】:
我正在开发一个库,我想知道一些关于我提供的某个函数的调用者的数据。特别是,我需要知道调用我的函数(重新定义的 malloc)的文件名、函数名和行。
编辑:这是一个最小的工作示例,我可以检测用户何时调用 malloc 并将他“重定向”到我自己的 malloc 函数:
main.c:
#include <stdio.h>
#include <stdlib.h>
#include "myLib.h"
int main(){
printf("Inside main, asking for memory\n");
int *p = malloc(sizeof(int));
*p = 3;
free(p);
return 0;
}
myLib.c:
#include "myLib.h"
void * myAlloc (size_t size){
void * p = NULL;
fprintf(stderr, "Inside my own malloc\n");
p = (malloc)(size);
return p;
}
#undef malloc
#define malloc(size) myAlloc(size)
myLib.h:
#ifndef MYLIB_H
#define MYLIB_H
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define malloc(size) myAlloc(size)
void * myAlloc(size_t size);
#endif
我尝试使用 _FILE_ _func_ 和 _LINE_ 关键字,但我无法让它工作,因为它在不同的模块中。
【问题讨论】:
-
请提供一个可以编译的minimal reproducible example,但您在问题中提到的错误除外。
-
#define malloc(size)产生语法错误:void *p = ; -
那么为什么这里的可变参数宏:
#define malloc(size, ...) myMalloc (size, __FILE__)应该是#define malloc(size) myMalloc (size, __FILE__) -
为什么需要知道?
-
@wobr 我用一个基本示例编辑了我的帖子,谢谢!
标签: c debugging c-preprocessor instrumentation