backtrace-tst.c 888 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <execinfo.h>
  2. #include <inttypes.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <stdint.h>
  6. static int
  7. compare (const void *p1, const void *p2)
  8. {
  9. void *ba[20];
  10. int n = backtrace (ba, sizeof (ba) / sizeof (ba[0]));
  11. if (n != 0)
  12. {
  13. char **names = backtrace_symbols (ba, n);
  14. if (names != NULL)
  15. {
  16. int i;
  17. printf ("called from %s\n", names[0]);
  18. for (i = 1; i < n; ++i)
  19. printf (" %s\n", names[i]);
  20. free (names);
  21. }
  22. }
  23. return *(const uint32_t *) p1 - *(const uint32_t *) p2;
  24. }
  25. int
  26. main (int argc, char *argv[])
  27. {
  28. uint32_t arr[20];
  29. size_t cnt;
  30. for (cnt = 0; cnt < sizeof (arr) / sizeof (arr[0]); ++cnt)
  31. arr[cnt] = random ();
  32. qsort (arr, sizeof (arr) / sizeof (arr[0]), sizeof (arr[0]), compare);
  33. for (cnt = 0; cnt < sizeof (arr) / sizeof (arr[0]); ++cnt)
  34. printf ("%" PRIx32 "\n", arr[cnt]);
  35. return 0;
  36. }