方法一
使用 LD_PRELOAD
字段的预加载方式
LD_PRELOAD=/usr/lib/libxsmemcheck.so mem-test
xsmemcheck.so 参考实现代码如下
void *malloc(size_t size)
{
if (THIS->real_malloc == NULL) THIS->real_malloc = dlsym(RTLD_NEXT, "malloc");
struct timespec tv;
clock_gettime(CLOCK_MONOTONIC, &tv);
void *ret = THIS->real_malloc(size);
fprintf(stderr, "%02ld:%02d:%02d.%06ld [%ld:%lx] xsmemcheck malloc size %ld result "FMT_P"\n", (tv.tv_sec/3600) % 24 ,(int)((tv.tv_sec/60) % 60),(int)(tv.tv_sec % 60),tv.tv_nsec / 1000, getpid(), pthread_self(), size, ret);
return ret;
}