#include <libunwind.h> | |
#include <stdlib.h> | |
void backtrace(int lower_bound) { | |
unw_context_t context; | |
unw_getcontext(&context); | |
unw_cursor_t cursor; | |
unw_init_local(&cursor, &context); | |
int n = 0; | |
do { | |
++n; | |
if (n > 100) { | |
abort(); | |
} | |
} while (unw_step(&cursor) > 0); | |
if (n < lower_bound) { | |
abort(); | |
} | |
} | |
void test1(int i) { | |
backtrace(i); | |
} | |
void test2(int i, int j) { | |
backtrace(i); | |
test1(j); | |
} | |
void test3(int i, int j, int k) { | |
backtrace(i); | |
test2(j, k); | |
} | |
int main() { | |
test1(1); | |
test2(1, 2); | |
test3(1, 2, 3); | |
} |