请问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);时候再次宕机而打出的堆栈内容。
麻烦各位高手帮忙分析下什么原因呢?
服务器程序宕机时候调用的打印函数调用栈的函数,一直都没有问题,但最近服务器频繁宕机,可堆栈居然打印不出来,网上也搜不到解答。
由于代码拷不出来,凭记忆写的伪代码。
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);时候再次宕机而打出的堆栈内容。
麻烦各位高手帮忙分析下什么原因呢?
...全文
相关推荐
Image Backtrace!-crx插件
在本例中,"Image_Backtrace!.crx"就是"Image Backtrace!"插件的打包文件,用户可以通过将这个文件拖放到浏览器的扩展管理页面来安装插件,从而享受其提供的服务。
arm平台根据栈进行backtrace的方法.docx
以下将详细介绍ARM中断、异常处理流程、AAPCS(ARM Procedure Call Standard)以及如何在没有第三方工具或特定编译器支持的情况下进行backtrace。1.
backtrace.rar
在这些情况下,能够获取到程序的backtrace就变得非常有用,因为它能显示调用栈的状态,即哪些函数按照什么顺序被调用,从而导致了当前的问题。
解析backtrace符号堆栈2次解析.zip
在IT领域,尤其是在调试和性能优化的过程中,"backtrace"是一个非常重要的概念。它是一种用于追踪程序执行流程的技术,能够帮助开发者找出程序出错时的调用栈信息,从而定位问题所在。
backtrace-开源
Backtrace 是 libexecinfo 和 glibc 的 backtrace API 的替代品。 由于 libexecinfo 在 OpenBSD 上不起作用,并且 glibc 的回溯是纯


