; -------------------------------------------------------------------------------- ; @Title: Show PRACTICE backtrace in AREA ; @Description: ; Prints a PRACTICE backtrace into the AREA window. ; Further handling of the error e.g. abort PRACTICE execution, user messages, ; aso. need's to be done in the calling script. ; This script must be invoked from an ON ERROR GOSUB block as shown below. ; Usage: ; Example 1: show Backtrace in AREA, abort PRACTICE execution ; ON ERROR GOSUB ; ( ; ON ERROR DEFault ; DO ~~/demo/practice/etc/print_backtrace.cmm ; ; ; AREA ; END ; ) ; ;
; ON ERROR inherit ; ; Example 2: show Backtrace in AREA, stop PRACTICE, show debug view ; ON ERROR GOSUB ; ( ; ON ERROR DEFault ; DO ~~/demo/practice/etc/print_backtrace.cmm ; ; ; AREA ; PLIST ; STOP ; RETURN ; ) ; ;
; ON ERROR inherit ; @Author: AME ; @Copyright: (C) 1989-2020 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Id: print_backtrace.cmm 16991 2021-01-14 09:21:03Z mobermeir $ ON ERROR DEFault IF VERSION.BUILD()<85424. ( PRINT "Sorry, your version of TRACE32 is too old for script " OS.PPF() ENDDO ) IF PRACTICE.CALLER.FILE(1.)=="" ENDDO IF PRACTICE.CALLER.FILE(2.)=="" ENDDO ( PRIVATE &sStackCallerFile &sCallerString &sStackCallerFile=PRACTICE.CALLER.FILE(2.) SPRINTF &sCallerString "(line %d., %s)" PRACTICE.CALLER.LINE(2.) OS.FILE.NAME(&sStackCallerFile) PRINT %COLOR.NORMAL "PRACTICE error: '" %ERROR ERROR.MESSAGE() "/" ERROR.ID() %COLOR.NORMAL "' when executing '" %ATTR 0x24 ERROR.CMDLINE() %ATTR 0 %COLOR.NORMAL "' &sCallerString" ) ( // print stackdump PRIVATE &nStackLevel &sStackCallerFile &nStackCallerFileLength &nStackLevel=1. RePeaT ( &sStackCallerFile=PRACTICE.CALLER.FILE(&nStackLevel+1.) IF ("&sStackCallerFile"!="") PRINTF " #%02u in %-32s line %4d., path %s" &nStackLevel OS.FILE.NAME("&sStackCallerFile")+"," PRACTICE.CALLER.LINE(&nStackLevel) "&sStackCallerFile" &nStackLevel=&nStackLevel+1. ) WHILE ((&nStackLevel<100.)&&("&sStackCallerFile"!="")) ) ENDDO