Author Topic: dbgcon - Script BASIC remote debugger  (Read 12660 times)

Support

  • Administrator
  • *****
  • Posts: 1
    • View Profile
dbgcon - Script BASIC remote debugger
« on: May 06, 2015, 02:47:55 am »
A few years ago I made some bug fixes to Peter's Verhas's experimental sdbg remote Script BASIC debugger. I wrote my own console client in SB which works great. I plan on using some of Dave Zimmer's enhancements to his VB/COM IDE/Debugger preprocessor project to view array contents and trace the call stack. The remote socket based Script BASIC debugger works with both local desktop scripts and remote sbhttpd proxy server web applications.

dbgcon.sb
' ScriptBasic Remote Console Debugger

cmdln = TRIM(COMMAND())
IF cmdln = "" THEN
  PRINT "Usage: dbgcon [prog2debug]\n"
  END
END IF
exitcode = EXECUTE("/usr/bin/scriba -i sdbg " & cmdln,-1,PID)
OPEN "127.0.0.1:6647" FOR SOCKET AS #1
WHILE NOT EOF(1)
  LINE INPUT #1, dbgs
  IF dbgs = ".\n" THEN
    PRINT "-> "
    LINE INPUT dbgc
    IF LCASE(CHOMP(dbgc)) = "h" THEN
PRINT """h help
s step one line
S step one line, do not step into functions or subs
o step until getting out of the current function
  (if you stepped into but changed your mind)
? var  print the value of a variable
u step one level up in the stack
d step one level down in the stack (for variable printing)
D step down in the stack to current execution depth
G list all global variables
L list all local variables
l [n-m] list the source lines
r [n] run to line n
R [n] run to line n but do not stop in recursive function call
b [n] set breakpoint on the line n or the current line
B [n-m] remove breakpoints from lines
q quit the program
"
""
    END IF
    PRINT #1, dbgc
    IF CHOMP(dbgc) = "q" THEN GOTO Done
  ELSE
    dbgcmd = CHOMP(dbgs)
' l - List Source  
   IF INSTR(dbgcmd,"Break-Point: ")<>undef THEN
      p = INSTR(dbgcmd,"Break-Point: ")
      IF MID(dbgcmd,p+13,1) = "0" THEN
        PRINT " "
      ELSE
        PRINT "*"
      END IF
      GOTO IT
    END IF
    IF INSTR(dbgcmd,"Line-Number: ")<>undef THEN
      p = INSTR(dbgcmd,"Line-Number: ")
      PRINT FORMAT("%~[0000] ~",VAL(MID(dbgcmd,p+13)))
      online = TRUE
      GOTO IT
    END IF
    IF INSTR(dbgcmd,"Line: ")<>undef THEN
      p = INSTR(dbgcmd,"Line: ")
      IF online THEN
        PRINT MID(dbgcmd,p+6),"\n"
      ELSE
        PRINT MID(dbgcmd,p),"\n"
      END IF        
      online = FALSE
      GOTO IT
    END IF
    IF INSTR(dbgcmd,"Global-Variable")<>undef THEN
      p = INSTR(dbgcmd,"Global-Variable")
      PRINT "G-Var" & MID(dbgcmd,p+15) & "\n"
      GOTO IT
    END IF
' Unprocessed out
  PRINT dbgs
  END IF
IT:
WEND
 
Done:
PRINT #1,"q"
CLOSE(1)
PRINT "Debug session closed.\n"
END
 
testarray.sb
' Long / Double / String
i = 1
d = .99
s = "JRS"
' Indices array
a[0,0] = 0
a[0,1] = 123
a[0,2] = 1.23
a[0,3] = "One,Two,Three"
a[1,10] = "Zero"
a[1,11] = 321
a[1,12] = 32.1
a[1,13] = "Three,Two,One"
' Asscociative array
b{"One"} = 1
b{"Two"} = .2
b{"Three"} = "*3*"
' Mix asscociative & indices array
c{"JRS"}[1] = 1
c{"JRS"}[2] = .2
c{"JRS"}[3] = "*3*"
PRINT "Done\n"
 
Output

jrs@laptop:~/sb/sb22/sbt$ scriba dbgcon.sb testarray.sb
Application: ScriptBasic Remote Debugger - Linux
Version: 1.0
Source-File-Count: 1
Source-File: testarray.sb
Line: 2
-> b15
Message: done
Line: 2
-> l1-
 [0001] ' Long / Double / String
 [0002] i = 1
 [0003] d = .99
 [0004] s = "JRS"
 [0005] ' Indices array
 [0006] a[0,0] = 0
 [0007] a[0,1] = 123
 [0008] a[0,2] = 1.23
 [0009] a[0,3] = "One,Two,Three"
 [0010] a[1,10] = "Zero"
 [0011] a[1,11] = 321
 [0012] a[1,12] = 32.1
 [0013] a[1,13] = "Three,Two,One"
 [0014] ' Asscociative array
*[0015] b{"One"} = 1
 [0016] b{"Two"} = .2
 [0017] b{"Three"} = "*3*"
 [0018] ' Mix asscociative & indices array
 [0019] c{"JRS"}[1] = 1
 [0020] c{"JRS"}[2] = .2
 [0021] c{"JRS"}[3] = "*3*"
 [0022] PRINT "Done\n"
Line: 2
-> r
Line: 15
-> r22
Line: 22
-> G
G-Var-Name: VT=0 @ 0x014BBD18 VN=main::i
G-Var-Value: 1
G-Var-Name: VT=1 @ 0x014C9258 VN=main::d
G-Var-Value: 0.990000
G-Var-Name: VT=2 @ 0x014C92B8 VN=main::s
G-Var-Value: "JRS"
G-Var-Name: VT=3 @ 0x014C9378 LB=0 : UB=1 VN=main::a
G-Var-Value: 
LB=0 : UB=3 VN=[0]
[0] VT=3 @ 0x014C9468 
[0] VT=0 @ 0x014C9558 0
[1] VT=0 @ 0x014C96D8 123
[2] VT=1 @ 0x014C9898 1.230000
[3] VT=2 @ 0x014BC0A8 "One,Two,Three"
LB=10 : UB=13 VN=[1]
[1] VT=3 @ 0x014BC1C8 
[10] VT=2 @ 0x014BC228 "Zero"
[11] VT=0 @ 0x014BC3A8 321
[12] VT=1 @ 0x014BC568 32.100000
[13] VT=2 @ 0x014BC6D8 "Three,Two,One"
G-Var-Name: VT=3 @ 0x014BC798 LB=0 : UB=5 VN=main::b
G-Var-Value: 
[0] VT=2 @ 0x014BC7F8 "One"
[1] VT=0 @ 0x014BC8B8 1
[2] VT=2 @ 0x014BC968 "Two"
[3] VT=1 @ 0x014BCA28 0.200000
[4] VT=2 @ 0x014BCAE8 "Three"
[5] VT=2 @ 0x014BCB48 "*3*"
G-Var-Name: VT=3 @ 0x014BCBA8 LB=0 : UB=1 VN=main::c
G-Var-Value: 
[0] VT=2 @ 0x014BCC08 "JRS"
LB=1 : UB=3 VN=[1]
[1] VT=3 @ 0x014BCCC8 
[1] VT=0 @ 0x014BCD88 1
[2] VT=1 @ 0x014BCEA8 0.200000
[3] VT=2 @ 0x014BD5C8 "*3*"
Line: 22
-> ?s
Value: "JRS"
Line: 22
-> ?b
Value: 
[0] VT=2 @ 0x014BC7F8 "One"
[1] VT=0 @ 0x014BC8B8 1
[2] VT=2 @ 0x014BC968 "Two"
[3] VT=1 @ 0x014BCA28 0.200000
[4] VT=2 @ 0x014BCAE8 "Three"
[5] VT=2 @ 0x014BCB48 "*3*"
Line: 22
-> r
Done
Debug session closed.
jrs@laptop:~/sb/sb22/sbt$

« Last Edit: May 11, 2015, 06:43:16 pm by support »