mirror of
https://github.com/outbackdingo/UltraGrid.git
synced 2026-03-20 05:40:06 +00:00
- pretty print by default (use one line output) - print inlines stack trace by default - better delimit individual stack frames
49 lines
1.0 KiB
Bash
Executable File
49 lines
1.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
SILENT=
|
|
|
|
while getopts 'hs' opt; do
|
|
case "$opt" in
|
|
'h'|'?')
|
|
cat <<-EOF
|
|
Usage:
|
|
$0 [-s] [STACKTRACE_FILE]
|
|
where
|
|
-s - silent
|
|
STACKTRACE_FILE - file containg stacktrace from UG (if not set, stdin is used)
|
|
EOF
|
|
[ $opt = h ] && exit 0 || exit 1
|
|
;;
|
|
's')
|
|
SILENT=yes
|
|
;;
|
|
esac
|
|
done
|
|
|
|
shift $(($OPTIND - 1))
|
|
|
|
IN=${1-/dev/stdin}
|
|
|
|
while read n; do
|
|
if ! expr "$n" : ".*(.*\+.*)" > /dev/null; then
|
|
continue
|
|
fi
|
|
EXE=$(expr $n : "\([^(]*\)")
|
|
addr=$(expr $n : ".*(\(.*\))")
|
|
# addr in format "func+addr"
|
|
if expr $addr : "[^\+]" >/dev/null; then
|
|
FUNC=$(expr $addr : "\([^\+]*\)")
|
|
OFFSET=$(expr $addr : "[^\+]*\+\(.*\)")
|
|
LINE=$(objdump -d -F $EXE | grep "<$FUNC>" | grep -v '^ ')
|
|
FUNC_OFFSET=$(expr "$LINE" : '.*File Offset: \([^)]*\)')
|
|
addr=$(($FUNC_OFFSET + $OFFSET))
|
|
addr=$(printf 0x%x $addr) # addr2line requires hex
|
|
fi
|
|
[ -z $SILENT ] && printf -- "- decoding $n:\n"
|
|
ARGS=
|
|
[ -z $SILENT ] && ARGS='-f -i -p'
|
|
addr2line -e $EXE $ARGS -C $addr
|
|
done <$IN
|
|
|
|
# vim: set noexpandtab:
|