请问backtrace什么情况下会出错?急!

loveruru 2009-08-03 07:52:32
我们程序在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);时候再次宕机而打出的堆栈内容。



麻烦各位高手帮忙分析下什么原因呢?
...全文
87 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveruru 2009-08-06
  • 打赏
  • 举报
回复
那个是笔误,因为内网代码拷不出来,我是凭记忆写的……
Jagen在路上 2009-08-05
  • 打赏
  • 举报
回复
你那个SIZE换成1024就应该没有问题了。
loveruru 2009-08-05
  • 打赏
  • 举报
回复
今天的日志倒是打出内容来了。问题是打了足足100M的内容。全是一模一样的内容。
就是打印时候遇到int size = backtrace(array, SIZE);
再次出错循环打印。
loveruru 2009-08-05
  • 打赏
  • 举报
回复
回楼上,从后来加的日志来看,SIZE没有得到。
int size = backtrace(array, SIZE);
在这句就出错了。
Jagen在路上 2009-08-04
  • 打赏
  • 举报
回复
我想知道你的那个
int size = backtrace(array, SIZE);
SIZE是多少?

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧