一、引言
backtrace()系列函数可用来输出代码出错时的函数调用关系。
A backtrace is the series of currently active function calls for the program.
#include
int backtrace(void **buffer, int size);
char **backtrace_symbols(void *const *buffer, int size);
void backtrace_symbols_fd(void *const *buffer, int size, int fd);
二、示例:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SIZE(100)
static sigset_t signals_handled;
static void dbg_backtrace(void)
{
int i, nline;
void *buffer[SIZE];
char **strings;
nline = backtrace(buffer, SIZE);
printf("addr: %d = backtrace()\n", nline);
strings = backtrace_symbols(buffer, nline);
if (NULL == strings) {
perror("backtrace_symbols()\n");
exit(EXIT_FAILURE);
}
for (i = 0; i < nline; i ++) {
printf("callback: %s\n", strings[j]);
}
/* backtrace_symbols() 内部有调用malloc函数 */
free(strings);
}
static void sig_handler_hup(int sig)
{
printf("%s() %d\n\n", __func__, sig);
}
static void sig_handler_debug(int sig)
{