天天看点

Linux c 打印进程堆栈,c – 从信号处理程序打印堆栈跟踪

有一个glibc函数回溯.手册页列出了调用的示例:

#define SIZE 100

void myfunc3(void) {

int j,nptrs;

void *buffer[100];

char **strings;

nptrs = backtrace(buffer,SIZE);

printf("backtrace() returned %d addresses\n",nptrs);

strings = backtrace_symbols(buffer,nptrs);

if (strings == NULL) {

perror("backtrace_symbols");

exit(EXIT_FAILURE);

}

for (j = 0; j < nptrs; j++)

printf("%s\n",strings[j]);

free(strings);

}

有关更多上下文,请参见手册页.

很难说这是否真的可以保证从信号处理程序中起作用,因为posix只列出了几个可以保证工作的重入函数.请记住:当您的进程的其余部分正好在malloc调用的中间时,可以调用信号处理程序.

我的猜测是,这通常有效,但可能会不时失败.对于调试,这可能已经足够了.