Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to debug EBlink scripts
#1
EBlink version 6.00 and beyond, does support Squirrel script debugging and tracing.

To use the script debugger, place EBlink in verbose level 7 (debug info) for function level debugging or level 8 (trace info) for line level debugging. 
For verbose levels below 7, debugging is turned off and breakpoints are ignored.

Invocation:
Debug level e.g.  ./eblink -v7 -G
Trace   level e.g.  ./eblink -v8 -G


Example of breakpoint in script:
Code:
    foreach(arch in STMICRO)
      if(arch[0] == targetApi.getCpuName()){
          foreach(addr in arch[1]) {
              try{
                   devReg = intrfApi.read(addr)
                   brkPt()                <----------- Breakpoint
                   if(devReg) break
              }
              catch(e){}
          }

If the program is halted, all the local variables are printed and the user get the option to: Single-step, step-out,  until exception or step to the end of current function
If the execution is main this means that the script file itself (no functions) is handled.


Example output debug level ( cli switch -v7 )
Quote:Search script auto.script in path: f:\software\EBlink\scripts
Script found: auto.script
Squirrel debug                          main©[9]    {auto.script}
Squirrel debug                          main®[42]    {auto.script}
Squirrel debug                        ebMain©[22]    {auto.script}
Search script atmel.script in path: f:\software\EBlink\scripts
Script found: atmel.script
Squirrel debug                          main©[13]    {atmel.script}
Squirrel debug                          main®[154]  {atmel.script}
Squirrel debug                    findDevice©[59]    {atmel.script}
Squirrel debug                    findDevice(e)[105]  {atmel.script}
Squirrel debug                    findDevice®[105]  {atmel.script}
Search script stm32.script in path: f:\software\EBlink\scripts
Script found: stm32.script
Squirrel debug                          main©[17]    {stm32.script}
Squirrel debug                          main®[167]  {stm32.script}
Squirrel debug                    findDevice©[90]    {stm32.script}
STmicro device : 0x413
Search script stmicro/stm32f4.script in path: f:\software\EBlink\scripts
Script found: stmicro/stm32f4.script
Squirrel debug                          main©[8]    {stmicro/stm32f4.script}
Squirrel debug                          main®[166]  {stmicro/stm32f4.script}
Squirrel debug                  stm32_device©[111]  {stmicro/stm32f4.script}
STmicro family : STM32F4x5/4x7
Detected FLASH : 1024KB
Configured RAM : 192KB
Search script stmicro/flash/f7_f4_f2.script in path: f:\software\EBlink\scripts
Script found: stmicro/flash/f7_f4_f2.script
Squirrel debug                          main©[10]    {stmicro/flash/f7_f4_f2.script}
Squirrel debug                          main®[350]  {stmicro/flash/f7_f4_f2.script}
Squirrel debug                  stm32_device®[166]  {stmicro/stm32f4.script}
Squirrel debug                    findDevice®[114]  {stm32.script}
Squirrel debug                        ebMain®[27]    {auto.script}

© = called function start
® = return current function
(e) = exception

Example output trace level ( cli switch -v8)
Quote:Required script load: atmel.script
Search script atmel.script in path: f:\software\EBlink\scripts
Script found: atmel.script
Squirrel trace                          main©[13]    {atmel.script}
Squirrel trace                          main(l)[13]    {atmel.script}
Squirrel trace                          main(l)[14]    {atmel.script}
Squirrel trace                          main(l)[15]    {atmel.script}
Squirrel trace                          main(l)[17]    {atmel.script}
Squirrel trace                          main(l)[20]    {atmel.script}
Squirrel trace                          main(l)[21]    {atmel.script}
Squirrel trace                          main(l)[22]    {atmel.script}
Squirrel trace                          main(l)[24]    {atmel.script}
Squirrel trace                          main(l)[30]    {atmel.script}
Squirrel trace                          main(l)[58]    {atmel.script}
Squirrel trace                          main(l)[119]  {atmel.script}
Squirrel trace                          main(l)[154]  {atmel.script}
Squirrel trace                          main®[154]  {atmel.script}
Squirrel trace                        ebMain(l)[26]    {auto.script}
Squirrel trace                    findDevice©[61]    {atmel.script}
Squirrel trace                    findDevice(l)[61]    {atmel.script}
Squirrel trace                    findDevice(l)[66]    {atmel.script}
Squirrel trace                    findDevice(l)[105]  {atmel.script}
Squirrel trace                    findDevice(e)[105]  {atmel.script}
Squirrel trace                    findDevice®[105]  {atmel.script}
Squirrel trace                        ebMain(l)[31]    {auto.script}
Squirrel trace                        ebMain(l)[34]    {auto.script}
Squirrel trace                        ebMain(l)[24]    {auto.script}
Squirrel trace                        ebMain(l)[25]    {auto.script}

© = called function start
® = return current function
(e) = exception
(l)  = script line


Example output breakpoint hit
Quote:Squirrel trace                    findDevice(l)[99]    {stm32.script}
Squirrel trace                    findDevice(l)[99]    {stm32.script}
Squirrel trace                    findDevice(l)[100]  {stm32.script}
Squirrel trace                    findDevice(l)[101]  {stm32.script}
Squirrel trace                    findDevice(l)[104]  {stm32.script}

== BREAKPOINT  ==
*FUNCTION [findDevice()] stm32.script line [104]                        <-- Call stack
*FUNCTION [ebMain()] auto.script line [26]                                 <-- Call stack
-LOCALS:                                                                                 <-- start local variable(s) list
          [arch] ARRAY
          [@INDEX@] INTEGER( 3 )
          [devReg] INTEGER( 268526611 )
          [this] TABLE
            [vendor] "stm32.script"
            [@INDEX@] INTEGER( 1 )
            [this] TABLE
Go, next Call, Return, Exception or Line? [g,c,r,e,l]                         <-- Command line input 

Command line input:
g = continue (go)
c = run to next call of a function
r = run to the return of current function
e = run until exception trap
l = next script line
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)