From 4c33511d5bec8e4a2599362041f4b761a5929929 Mon Sep 17 00:00:00 2001 From: Travis Cross Date: Tue, 21 Jan 2014 03:38:41 +0000 Subject: [PATCH] Add utility to generate backtraces from core files This should help with getting people reporting issues to provide us the exact and complete debugging information we need. In many cases we'll be able to have them just run this script against their core file. --- scripts/backtrace-from-core | 89 +++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 scripts/backtrace-from-core diff --git a/scripts/backtrace-from-core b/scripts/backtrace-from-core new file mode 100755 index 0000000000..e8f7d98922 --- /dev/null +++ b/scripts/backtrace-from-core @@ -0,0 +1,89 @@ +#!/bin/sh +##### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*- +##### Author: Travis Cross + +log1 () { printf '%s' "$1">&2; } +log () { printf '%s\n' "$1">&2; } +err () { log "$1"; exit 1; } + +usage () { + local opt="$1" bs="" be="" + $opt && { bs="[ "; be=" ]"; } + log "usage: $0 ${bs}${be}" +} + +while getopts "h" o; do + case "$o" in + h) usage true; exit 0; ;; + esac +done +shift $(($OPTIND-1)) + + +if [ $# -lt 1 ]; then + usage true; exit 1 +fi +core="$1" +if ! [ $# -lt 2 ]; then + fspath="$2" + [ -x "$fspath" ] || err "Not executable: $fspath" +fi +btpath="/tmp/$(date -u +%Y%m%dT%H%M%SZ)-bt.txt" +if [ -z "$fspath" ]; then + for x in "$(which freeswitch)" \ + /usr/bin/freeswitch /usr/sbin/freeswitch \ + /usr/local/bin/freeswitch /usr/local/sbin/freeswitch \ + /opt/freeswitch/bin/freeswitch; do + ! [ -x "$x" ] || { fspath="$x"; break; } + done +fi +if [ -z "$fspath" ]; then + log "Couldn't find FS binary" + usage false; exit 1 +fi +if test $(id -u) = 0 && test -f /etc/debian_version; then + cat >&2 <<'EOF' +### You're running on Debian. Please make sure you have appropriate +### freeswitch-*-dbg packages installed so we get as many symbols in +### this backtrace as possible. I won't install these for you. If +### you're running the freeswitch-all package, then you should install +### freeswitch-all-dbg. +EOF +log '' +fi + +log1 'Generating backtrace...' +gdb "$fspath" "$core" > $btpath <<'EOF' +set prompt +set pagination off +echo \n\n +echo ================================================================================\n +echo # GDB session generated by FS backtrace-from-core\n +echo ================================================================================\n +echo \n\n +echo ================================================================================\n +echo # info threads\n +echo ================================================================================\n +info threads +echo ================================================================================\n +echo # bt\n +echo ================================================================================\n +bt +echo ================================================================================\n +echo # bt full\n +echo ================================================================================\n +bt full +echo ================================================================================\n +echo # thread apply all bt\n +echo ================================================================================\n +thread apply all bt +echo ================================================================================\n +echo # thread apply all bt full\n +echo ================================================================================\n +thread apply all bt full +quit +EOF +log 'done' +log '' +log "Please attach the backtrace here:" +log "$btpath"