Providing backtracing that's signal-handler-safe is a special case. From within a signal handler, you can use only bt_get_backtrace(), and you must ensure access to memory is without conflict. For example:
bt_accessor_t acc_sighandler1; bt_addr_t pc_sighandler1[10]; int cnt_sighandler1; void sighandler1(int sig) { cnt_sighandler1 = bt_get_backtrace(&acc_sighandler1, pc_sighandler1, sizeof(pc_sighandler1)/sizeof(bt_addr_t)); } thread_func() { char out[512]; bt_init_accessor(&acc_sighandler1, BT_SELF); signal(SIGUSR2, sighandler1); ... bt_sprnf_addrs(&memmap, pc_sighandler1, cnt_sighandler1, "%a", out, sizeof(out), 0); ... bt_release_accessor(&acc); ... }