43 lines
		
	
	
		
			568 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			568 B
		
	
	
	
		
			C++
		
	
	
	
#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);
 | 
						|
}
 |