1 #include <libunwind.h> 2 #include <stdlib.h> 3 4 void backtrace(int lower_bound) { 5 unw_context_t context; 6 unw_getcontext(&context); 7 8 unw_cursor_t cursor; 9 unw_init_local(&cursor, &context); 10 11 int n = 0; 12 do { 13 ++n; 14 if (n > 100) { 15 abort(); 16 } 17 } while (unw_step(&cursor) > 0); 18 19 if (n < lower_bound) { 20 abort(); 21 } 22 } 23 24 void test1(int i) { 25 backtrace(i); 26 } 27 28 void test2(int i, int j) { 29 backtrace(i); 30 test1(j); 31 } 32 33 void test3(int i, int j, int k) { 34 backtrace(i); 35 test2(j, k); 36 } 37 38 int main() { 39 test1(1); 40 test2(1, 2); 41 test3(1, 2, 3); 42 } 43