添加信号处理
This commit is contained in:
38
src/backtrace.c
Normal file
38
src/backtrace.c
Normal file
@@ -0,0 +1,38 @@
|
||||
#include "backtrace.h"
|
||||
|
||||
#include "buffer.h"
|
||||
#include "config.h"
|
||||
|
||||
#ifdef HAS_EXECINFO
|
||||
#include <execinfo.h>
|
||||
#endif
|
||||
|
||||
#define MAX_STACK_SIZE 32
|
||||
|
||||
|
||||
/**
|
||||
* Get a backtrace.
|
||||
* @param buffer The buffer to fill with backtrace.
|
||||
*/
|
||||
void backtrace_get(buffer_t *buffer) {
|
||||
buffer_init(buffer);
|
||||
|
||||
#ifdef HAS_EXECINFO
|
||||
void *stack[MAX_STACK_SIZE];
|
||||
char **bt;
|
||||
int stack_size;
|
||||
|
||||
stack_size = backtrace(stack, countof(stack));
|
||||
bt = backtrace_symbols(stack, stack_size);
|
||||
|
||||
if (bt) {
|
||||
for (int i = 0; i < stack_size; i++) {
|
||||
if (i > 0) buffer_addsl(buffer, "\n");
|
||||
buffer_adds(buffer, bt[i]);
|
||||
}
|
||||
p_delete(&bt);
|
||||
} else
|
||||
#endif
|
||||
|
||||
buffer_addsl(buffer, "Cannot get backtrace symbols.");
|
||||
}
|
||||
Reference in New Issue
Block a user