stackdump 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/bin/bash
  2. case "$1" in
  3. map|char|login)
  4. # Check for SQL postfix
  5. if [ "$2" = "sql" ]; then
  6. SERVER="$1-server_sql"
  7. else
  8. SERVER="$1-server"
  9. fi
  10. ;;
  11. *|""|help)
  12. echo "Usage 1: ${0##*/} [server-type] [txt/sql]"
  13. echo Server type can be map, login, or char. Examples:
  14. echo "$ ./${0##*/} map"
  15. echo "$ ./${0##*/} login sql"
  16. echo
  17. echo "Usage 2: ${0##*/} [server-type] [txt/sql] [number]"
  18. echo Server type can be map, login, or char. Examples:
  19. echo "$ ./${0##*/} map txt 0001"
  20. echo "$ ./${0##*/} login sql 0002"
  21. echo
  22. echo Note: Dump files inside /log will also be scanned.
  23. exit
  24. ;;
  25. esac
  26. # Check if server file needs .exe (Windows/Cygwin)
  27. if [ ! -e $SERVER ]; then
  28. if [ -e $SERVER.exe ]; then
  29. SERVER=$SERVER.exe
  30. else
  31. echo Error: $SERVER not found!
  32. exit
  33. fi
  34. fi
  35. # Assemble stackdump filename
  36. if [ $# > 2 ]; then
  37. STACK="$SERVER$3.stackdump"
  38. else
  39. STACK="$SERVER.stackdump"
  40. fi
  41. # Check if file exists.
  42. # Try looking under '/log' if it isn't
  43. if [ ! -e $STACK ]; then
  44. if [ -e log/$STACK ]; then
  45. STACK=log/$STACK
  46. else
  47. echo Error: $STACK not found!
  48. exit
  49. fi
  50. fi
  51. # Finally dump the backtrace
  52. # If number is given, Sig-plugin format. otherwise, standard stackdump format
  53. if [ $# > 2 ]; then
  54. awk '$2 ~ /[0-9a-eA-E]\]$/{print $2}' $STACK | tr -d \[\] | addr2line -f -e $SERVER
  55. else
  56. awk '/^[0-9]/{print $2}' $STACK | addr2line -f -e $SERVER
  57. fi