首先,我要感谢@wallyk给了我很好的初始指示。我解决了如下问题。显然,libc的gprof出口处理程序称为
_mcleanup。因此,我为SIGUSR1注册了一个信号处理程序(未由第三方库使用),并调用
_mcleanup和
_exit。完美的作品!该代码如下所示:
#include <dlfcn.h>#include <stdio.h>#include <unistd.h>void sigUsr1Handler(int sig){ fprintf(stderr, "Exiting on SIGUSR1n"); void (*_mcleanup)(void); _mcleanup = (void (*)(void))dlsym(RTLD_DEFAULT, "_mcleanup"); if (_mcleanup == NULL) fprintf(stderr, "Unable to find gprof exit hookn"); else _mcleanup(); _exit(0);}int main(int argc, char* argv[]){ signal(SIGUSR1, sigUsr1Handler); neverReturningLibraryFunction();}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)