From: Ralph Ronnquist Date: Sun, 23 May 2021 07:23:23 +0000 (+1000) Subject: improved debug support X-Git-Url: https://git.rrq.au/?a=commitdiff_plain;h=8877355de65c4ae42782bd1f9ca33dbe2b5ce653;p=rrq%2Frrqforth.git improved debug support --- diff --git a/debug.sh b/debug.sh index 5963b30..12772c2 100755 --- a/debug.sh +++ b/debug.sh @@ -8,17 +8,26 @@ NBR=( $(eval "echo {1..$(wc -l < gdbinit)}") ) for I in ${NBR[@]} ; do echo disable $I ; done >> gdbinit DS="$(grep "${PFX}DS_TOP:" rrqforth.map | sed 's/ .*//')" - +RS="$(grep "${PFX}RS_TOP:" rrqforth.map | sed 's/ .*//')" cat <> gdbinit display *(void**)\$rsp@(((void*)$DS-\$rsp)/8)+1 -display (char*)(*(void**)(\$rax-16)+32) +display *(void**)\$rbp@(((void*)$RS-\$rbp)/8)+1 display (void*)\$rax display (void*)\$rsi define si stepi - x/3i \$pc - python gdb.execute("shell ./grepline.sh " + str(gdb.parse_and_eval("\$pc"))) + x/2i \$pc + python gdb.execute("shell ./grepline.sh rrqforth.map " + str(gdb.parse_and_eval("\$pc"))) +end + +define map + if \$argc == 1 + python gdb.execute("shell ./grepline.sh rrqforth.map \$arg0" + " 1 " ) + else + python gdb.execute("shell ./grepline.sh rrqforth.map \$arg0" + " 1 " + "\$arg1" ) + end +end EOF exec gdb -x gdbinit rrqforth diff --git a/grepline.sh b/grepline.sh index 677484a..bb453da 100755 --- a/grepline.sh +++ b/grepline.sh @@ -1,3 +1,24 @@ #!/bin/bash # -grep "^$1 " rrqforth.map +# This script implements some special commands that are set up for gdb +# in debug.sh + +F=${1-rrqforth.map} + +#echo "$*" + +case "$3" in + 1) + if [ -n "$4" ] ;then + if [ -z "${4%%-*}" ] ; then + N=( -B "${4#-}" ) + else + N=( -A ${4} ) + fi + fi + grep "${N[@]}" -E "$2" $F + ;; + *) + grep -E "(\\bWORD\\b|^$2) " $F | \ + awk '$3 == "WORD" {x=$0;next} x!="" {print x; x=""}{ print;}' +esac