请问backtrace什么情况下会出错?急!
我们程序在LINUX 下运行
服务器程序宕机时候调用的打印函数调用栈的函数,一直都没有问题,但最近服务器频繁宕机,可堆栈居然打印不出来,网上也搜不到解答。
由于代码拷不出来,凭记忆写的伪代码。
void *array[1024];
char **strings = NULL;
打印("=====Debug Msg Begin=====");
int size = backtrace(array, SIZE);
strings = backtrace_symbols(array, size );
for (j = 0; j < size ; j++)
{
打印strings[j]的内容;
}
打印("=====Debug Msg End=====");
输出结果是=====Debug Msg Begin=====后面就没了。
而更奇怪的是今天的日志倒是把堆栈打出来了,但问题追踪到代码里,居然指向是int size = backtrace(array, SIZE);
就是说服务器由于未知原因宕机后,走到int size = backtrace(array, SIZE);时候再次宕机而打出的堆栈内容。
麻烦各位高手帮忙分析下什么原因呢?