想把调用栈打印到log里面,backtrace,backtrace_symbool,
时间: 2024-03-22 08:38:58 浏览: 68
好的,以下是将调用栈打印到log里面的方法,包括backtrace和backtrace_symbols函数:
1. backtrace函数
backtrace函数可以获取当前线程的调用栈,并将调用栈信息存储在指定的数组buffer中。调用backtrace函数的代码如下:
```c
#include <execinfo.h>
void print_trace()
{
void* buffer[100];
int size = backtrace(buffer, 100);
backtrace_symbols_fd(buffer, size, STDOUT_FILENO);
}
```
上述代码中,print_trace函数用于打印调用栈信息,backtrace函数获取当前线程的调用栈,将调用栈信息存储在buffer数组中,size表示调用栈的深度,最多不超过100个函数,backtrace_symbols_fd函数将调用栈信息转换为可读字符串,并打印到标准输出。
2. backtrace_symbols函数
backtrace_symbols函数可以将调用栈信息转换为可读字符串,方便输出到log中。调用backtrace_symbols函数的代码如下:
```c
#include <execinfo.h>
void print_trace()
{
void* buffer[100];
int size = backtrace(buffer, 100);
char** symbols = backtrace_symbols(buffer, size);
for (int i = 0; i < size; i++) {
printf("%s\n", symbols[i]);
}
free(symbols);
}
```
上述代码中,backtrace_symbols函数将调用栈信息转换为可读字符串,存储在symbols数组中,需要注意的是symbols数组需要手动释放内存,否则会造成内存泄漏。最后,将symbols数组中的字符串逐个打印到log中。
总结:
以上是将调用栈信息打印到log中的方法,通过backtrace和backtrace_symbols函数可以获取当前线程的调用栈信息,并将其转换为可读字符串,方便输出到log中,有助于排查程序中的bug。
阅读全文