首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

backtrace有关问题

2012-08-17 
紧急求助backtrace问题有个比较难跟的死机,由于无法用gdb,便想用backtrace来打出栈信息来跟一下,写了个测

紧急求助backtrace问题
有个比较难跟的死机,由于无法用gdb,便想用backtrace来打出栈信息来跟一下,
写了个测试程序,但老是打不出预期的效果,诸位大侠帮帮忙,下面是代码。
预期的是在收到SIGSEGV后打出栈内信息,但连test这个符号都不会出现,急啊!
void print_trace ()
{
void *array[10];
size_t size;
char **strings;
size_t i;

size = backtrace (array, 10);
strings = backtrace_symbols (array, size);

printf ("Obtained %zd stack frames.\n", size);

for (i = 0; i < size; i++)
printf ("%s\n", strings[i]);

free (strings);
}

void dummy_function (int x)
{
print_trace();
}

void test()
{
strcpy(NULL, "str");
}
int main (void)
{
signal(SIGSEGV, dummy_function);
test();
return 0;
}

[解决办法]
想了下,backtrace_symbols这些函数应该是不能放在信号处理函数里的,
产生某个信号是会通知内核来决定怎么处理,所以应该是回溯不到test函数那里去的
只能通过分析core文件

热点排行