fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <chrono>
  5.  
  6. #include <execinfo.h>
  7.  
  8.  
  9. using namespace std;
  10.  
  11.  
  12. static size_t backtrace_size;
  13.  
  14.  
  15. const size_t max_backtrace_size = 100;
  16. void *backtrace_buf[max_backtrace_size];
  17. static void track()
  18. {
  19. if(backtrace_size > 0)
  20. ::backtrace(backtrace_buf, backtrace_size);
  21. }
  22.  
  23.  
  24. static void op(size_t i)
  25. {
  26. if(i == 0)
  27. {
  28. track();
  29. return;
  30. }
  31. op(i - 1);
  32. }
  33.  
  34.  
  35. int main(int argc, char *argv[])
  36. {
  37. const size_t stack_depth = stoll(string(argv[1]));
  38. backtrace_size = stoll(string(argv[2]));
  39. const size_t num_its = stoll(string(argv[3]));
  40.  
  41. const chrono::time_point<std::chrono::system_clock> start = chrono::system_clock::now();
  42. for(size_t i = 0; i < num_its; ++i)
  43. {
  44. op(stack_depth);
  45. }
  46. const chrono::time_point<std::chrono::system_clock> end = chrono::system_clock::now();
  47. cout << std::chrono::duration<double>(end - start).count() << endl;
  48.  
  49. return 0;
  50. }
Runtime error #stdin #stdout #stderr 0s 3268KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid