Open Forum > What's New
dbgcon - Script BASIC remote debugger
(1/1)
Support:
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
--- Code: Script BASIC ---' ScriptBasic Remote Console Debugger cmdln = TRIM(COMMAND())IF cmdln = "" THEN PRINT "Usage: dbgcon [prog2debug]\n" ENDEND IFexitcode = EXECUTE("/usr/bin/scriba -i sdbg " & cmdln,-1,PID)OPEN "127.0.0.1:6647" FOR SOCKET AS #1WHILE NOT EOF(1) LINE INPUT #1, dbgs IF dbgs = ".\n" THEN PRINT "-> " LINE INPUT dbgc IF LCASE(CHOMP(dbgc)) = "h" THENPRINT """h helps step one lineS step one line, do not step into functions or subso step until getting out of the current function (if you stepped into but changed your mind)? var print the value of a variableu step one level up in the stackd step one level down in the stack (for variable printing)D step down in the stack to current execution depthG list all global variablesL list all local variablesl [n-m] list the source linesr [n] run to line nR [n] run to line n but do not stop in recursive function callb [n] set breakpoint on the line n or the current lineB [n-m] remove breakpoints from linesq 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 IFIT:WEND Done:PRINT #1,"q"CLOSE(1)PRINT "Debug session closed.\n"END
testarray.sb
--- Code: Script BASIC ---' Long / Double / Stringi = 1d = .99s = "JRS"' Indices arraya[0,0] = 0a[0,1] = 123a[0,2] = 1.23a[0,3] = "One,Two,Three"a[1,10] = "Zero"a[1,11] = 321a[1,12] = 32.1a[1,13] = "Three,Two,One"' Asscociative arrayb{"One"} = 1b{"Two"} = .2b{"Three"} = "*3*"' Mix asscociative & indices arrayc{"JRS"}[1] = 1c{"JRS"}[2] = .2c{"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$
Navigation
[0] Message Index
Go to full version