Hi Laurent,Hi Charles,
Which parts of o2 did you have to modify?
I could provide per-line and per-procedure callbacks. Then you would not need to touch the source code, and it would work for all future versions of o2.
.dbgdata
hl00000000 hw0000 hw0000 hw0001
hl00000000 hw0000 hw0000 hw0002
hl00000000 hw0000 hw0000 hw0003
hl00000000 hw0000 hw0000 hw0005
hl00000000 hw0000 hw0000 hw0008
hl00000000 hw0000 hw0000 hw0009
hl00000000 hw0000 hw0000 hw000F
hl00000000 hw0000 hw0001 hw0010
hl00000000 hw0000 hw0001 hw0011
hl00000000 hw0000 hw0001 hw0012
hl00000000 hw0000 hw0001 hw0013
hl00000000 hw0000 hw0001 hw0014
hl00000000 hw0000 hw0001 hw0015
hl00000000 hw0000 hw0001 hw0016
hl00000000 hw0000 hw0000 hw001C
hl00000000 hw0000 hw0002 hw001D
hl00000000 hw0000 hw0002 hw001E
hl00000000 hw0000 hw0002 hw001F
hl00000000 hw0000 hw0002 hw0026
hl00000000 hw0000 hw0000 hw002A
hl00000000 hw0000 hw0000 hw002B
hl00000000 hw0000 hw0000 hw002C
hl00000000 hw0000 hw0000 hw0032
hl00000000 hw0000 hw0000 hw0033
hl00000000 hw0000 hw0000 hw0035
hl00000000 hw0000 hw0000 hw0036
hl00000000 hw0000 hw0000 hw0037
hl00000000 hw0000 hw0000 hw0038
hl00000000 hw0000 hw0000 hw003A
hl00000000 hw0000 hw0000 hw003C
hl00000000 hw0000 hw0000 hw003E
hl00000000 hw0000 hw0000 hw0040
hl00000000 hw0000 hw0000 hw0041
hl00000000 hw0000 hw0000 hw0042
hl00000000 hw0000 hw0000 hw0043
hl00000000 hw0000 hw0000 hw0044
hl00000000 hw0000 hw0000 hw0045
hl00000000 hw0000 hw0000 hw0047
hl00000000 hw0000 hw0000 hw0049
hl00000000 hw0000 hw0000 hw004B
hl00000000 hw0000 hw0000 hw004C
hl00000000 hw0000 hw0000 hw004D
hl00000000 hw0000 hw0000 hw004F
hl00000000 hw0000 hw0000 hw0051
hl00000000 hw0001 hw0000 hw0001
hl00000000 hw0001 hw0003 hw0002
hl00000000 hw0001 hw0003 hw0003
hl00000000 hw0001 hw0003 hw0005
hl00000000 hw0000 hw0000 hw0054
hl00000000 hw0000 hw0000 hw005E
hl00000000 hw0000 hw0000 hw0060
hl00000000 hw0000 hw0000 hw0064
hl00000000 hw0000 hw0000 hw0065
hl00000000 hw0000 hw0000 hw0066
hl00000000 hw0000 hw0000 hw0069
hl00000000 hw0000 hw0004 hw006A
hl00000000 hw0000 hw0004 hw006B
hl00000000 hw0000 hw0004 hw006C
hl00000000 hw0000 hw0004 hw006D
hl00000000 hw0000 hw0004 hw006E
hl00000000 hw0000 hw0004 hw006F
hl00000000 hw0000 hw0004 hw0070
hl00000000 hw0000 hw0004 hw0071
hl00000000 hw0000 hw0004 hw0072
hl00000000 hw0000 hw0004 hw0073
hl00000000 hw0000 hw0004 hw0074
hl00000000 hw0000 hw0004 hw0075
hl00000000 hw0000 hw0004 hw0076
hl00000000 hw0000 hw0000 hw0078
hl00000000 hw0000 hw0000 hw007A
hl00000000 hw0000 hw0000 hw007B
hl00000000 hw0000 hw0000 hw007D
hl00000000 hw0000 hw0000 hw007E
hl00000000 hw0000 hw0000 hw007F
hl00000000 hw0000 hw0000 hw0080
hl00000000 hw0000 hw0000 hw0081
hl00000000 hw0000 hw0000 hw0082
hl00000000 hw0000 hw0000 hw0083
hl00000000 hw0000 hw0000 hw0084
hl00000000 hw0000 hw0000 hw0000
.dbgprad
hl00000000 hl00000000
hl00000000 hl00000000
hl00000000 hl00000000
hl00000000 hl00000000
ga _main_ hl00000000
hl00000000
gd 0 2F 00 "F:D:\OxygenBasicProgress\OxygenBasic\test.o2bas"
gd 0 0F 00 "F:testinc.o2bas"
gd 0 E9 00 "T:rectangle 20
datain 4 0 0 9 AA #sys#sys#sys#sys#sys@00000 sys
show 4 4 0 9 AA @ string
/\
posx 4 0 0 1 AA , sys
posy 4 4 0 1 AA , sys
lenx 4 8 0 1 AA , sys
leny 4 12 0 1 AA , sys
color 4 16 0 1 AA , sys
"
gd 0 6C 00 "T:tsubudt 8
fsubshort 2 0 0 1 AA , short
fsubbyte 1 2 0 1 AA , byte
fsubinteger 4 4 0 1 AA , integer
"
gd 0 40 01 "T:tudt 24
fsys 4 0 0 1 AA , sys
fbyte 1 4 0 1 AA , byte
flong 4 8 0 1 AA , long
fsubudt 8 12 0 5 AA , tsubudt
fsubudt.fsubshort 2 12 0 1 AA , short
fsubudt.fsubbyte 1 14 0 1 AA , byte
fsubudt.fsubinteger 4 16 0 1 AA , integer
uinteger 4 20 0 1 AA , sys
ubyte 1 20 0 1 AA , byte
"
gd 0 29 00 "T:simple 4
fsimp 4 0 0 1 AA , integer
"
gd 0 14 00 "P:method datain 0 15"
gd 0 2D 00 "V:this t=rectangle a=[ebp+0x8] i=1 k=0 d= b=1"
gd 0 28 00 "V:param t=sys a=[ebp+0xC] i=0 k=0 d= b=1"
gd 0 24 00 "V:pdata t=sys a=[ebp] i=0 k=0 d= b=1"
gd 0 25 00 "V:px t=sys a=[ebp+0xC] i=0 k=0 d= b=1"
gd 0 26 00 "V:py t=sys a=[ebp+0x10] i=0 k=0 d= b=1"
gd 0 26 00 "V:lx t=sys a=[ebp+0x14] i=0 k=0 d= b=1"
gd 0 26 00 "V:ly t=sys a=[ebp+0x18] i=0 k=0 d= b=1"
gd 0 28 00 "V:rgba t=sys a=[ebp+0x1C] i=0 k=0 d= b=1"
gd 0 12 00 "P:method show 0 28"
gd 0 2D 00 "V:this t=rectangle a=[ebp+0x8] i=1 k=0 d= b=1"
gd 0 28 00 "V:param t=sys a=[ebp+0xC] i=0 k=0 d= b=1"
gd 0 24 00 "V:pdata t=sys a=[ebp] i=0 k=0 d= b=1"
gd 0 2E 00 "V:_retval t=string a=[ebp-0x10] i=0 k=0 d= b=1"
gd 0 2A 00 "V:tab t=string a=[ebp-0x14] i=0 k=0 d= b=1"
gd 0 2D 00 "V:cr t=string a=[ebp-0x1C] i=0 k=0 d=2 2 b=1"
gd 0 27 00 "V:2 t=long a=[ebp-0x20] i=0 k=0 d= b=1"
gd 0 11 00 "P:sub testsub 1 1"
gd 0 28 00 "V:param t=sys a=[ebp+0x8] i=0 k=0 d= b=1"
gd 0 24 00 "V:pdata t=sys a=[ebp] i=0 k=0 d= b=1"
gd 0 2B 00 "V:vshort t=short a=[ebp+0x8] i=1 k=0 d= b=1"
gd 0 27 00 "V:a t=short a=[ebp-0x10] i=0 k=0 d= b=1"
gd 0 27 00 "V:9 t=long a=[ebp-0x14] i=0 k=0 d= b=1"
gd 0 16 00 "P:function test2 0 105"
gd 0 28 00 "V:param t=sys a=[ebp+0x8] i=0 k=0 d= b=1"
gd 0 24 00 "V:pdata t=sys a=[ebp] i=0 k=0 d= b=1"
gd 0 2D 00 "V:totval t=integer a=[ebp+0x8] i=0 k=0 d= b=1"
gd 0 2D 00 "V:totref t=integer a=[ebp+0xC] i=1 k=0 d= b=1"
gd 0 2A 00 "V:titi t=float a=[ebp+0x10] i=0 k=0 d= b=1"
gd 0 2E 00 "V:motheref t=short a=[ebp+0x14] i=1 k=0 d= b=1"
gd 0 2C 00 "V:_retval t=byte a=[ebp-0x10] i=0 k=0 d= b=1"
gd 0 29 00 "V:param t=sys a=[ebp-0x14] i=0 k=0 d= b=1"
gd 0 2E 00 "V:_tatax t=integer a=[ebp-0x18] i=1 k=0 d= b=1"
gd 0 39 00 "V:staticshort t=short a=[ebx+0x1278] i=0 k=0 d=89 89 b=1"
gd 0 29 00 "V:tata t=byte a=[ebp-0x1C] i=0 k=0 d= b=1"
gd 0 25 00 "V:14 t=8 a=[ebp-0x24] i=0 k=0 d= b=1"
gd 0 0F 00 "P:sub main: 0 1"
gd 0 39 00 "V:rectangle_table t=sys a=[ebx+0x1000] i=0 k=0 d=2 2 b=1"
gd 0 2E 00 "V:mtest t=string a=[ebx+0x1008] i=0 k=0 d= b=1"
gd 0 34 00 "V:vsub t=tsubudt a=[ebx+0x100C] i=0 k=0 d=10 10 b=1"
gd 0 39 00 "V:locintarr t=integer a=[ebx+0x105C] i=0 k=0 d=77 77 b=1"
gd 0 3A 00 "V:redimshort_buffer t=string a=[ebx+0x1190] i=0 k=0 d= b=1"
gd 0 36 00 "V:redimshort_count t=int a=[ebx+0x1194] i=0 k=0 d= b=1"
gd 0 32 00 "V:redimshort t=short a=[ebx+0x1198] i=1 k=0 d= b=1"
gd 0 33 00 "V:redimshort_qb t=sys a=[ebx+0x119C] i=0 k=0 d= b=1"
gd 0 33 00 "V:redimshort_le t=sys a=[ebx+0x11A0] i=0 k=0 d= b=1"
gd 0 33 00 "V:redimshort_qn t=sys a=[ebx+0x11A4] i=0 k=0 d= b=1"
gd 0 26 00 "V:3 t=8 a=[ebx+0x11A8] i=0 k=0 d= b=1"
gd 0 30 00 "V:rect t=rectangle a=[ebx+0x11B0] i=0 k=0 d= b=1"
gd 0 33 00 "V:redimshort_qb t=sys a=[ebx+0x11C4] i=0 k=0 d= b=1"
gd 0 33 00 "V:redimshort_le t=sys a=[ebx+0x11C8] i=0 k=0 d= b=1"
gd 0 33 00 "V:redimshort_qn t=sys a=[ebx+0x11CC] i=0 k=0 d= b=1"
gd 0 26 00 "V:4 t=8 a=[ebx+0x11D0] i=0 k=0 d= b=1"
gd 0 33 00 "V:redimshort_qb t=sys a=[ebx+0x11D8] i=0 k=0 d= b=1"
gd 0 33 00 "V:redimshort_le t=sys a=[ebx+0x11DC] i=0 k=0 d= b=1"
gd 0 33 00 "V:redimshort_qn t=sys a=[ebx+0x11E0] i=0 k=0 d= b=1"
gd 0 26 00 "V:5 t=8 a=[ebx+0x11E4] i=0 k=0 d= b=1"
gd 0 29 00 "V:7 t=long a=[ebx+0x11EC] i=0 k=0 d= b=1"
gd 0 34 00 "V:vbyte t=byte a=[ebx+0x11F0] i=0 k=0 d=100 100 b=0"
gd 0 2A 00 "V:11 t=long a=[ebx+0x1254] i=0 k=0 d= b=1"
gd 0 2A 00 "V:13 t=long a=[ebx+0x1258] i=0 k=0 d= b=1"
gd 0 31 00 "V:vglobal t=integer a=[ebx+0x125C] i=0 k=0 d= b=1"
gd 0 2B 00 "V:vudt t=tudt a=[ebx+0x1260] i=0 k=0 d= b=1"
gd 0 2F 00 "V:mtata t=integer a=[ebx+0x132C] i=0 k=0 d= b=1"
gd 0 2F 00 "V:mtotr t=integer a=[ebx+0x1330] i=0 k=0 d= b=1"
gd 0 2E 00 "V:mtutu t=double a=[ebx+0x1334] i=0 k=0 d= b=1"
gd 0 30 00 "V:motheref t=short a=[ebx+0x133C] i=0 k=0 d= b=1"
gd 0 2A 00 "V:16 t=long a=[ebx+0x1340] i=0 k=0 d= b=1"
gd 0 2F 00 "V:iloop t=integer a=[ebx+0x1344] i=0 k=0 d= b=1"
gd 0 2A 00 "V:17 t=long a=[ebx+0x1348] i=0 k=0 d= b=1"
gd 0 2A 00 "V:19 t=long a=[ebx+0x134C] i=0 k=0 d= b=1"
gd 0 1A 00 "D:B0 2018-05-24 T 12:49:29"
00 00 00 01 `end_of_dbgdata` 01 /+1000
(Charles,
Alongside a more common WinDiff, WinMerge (http://winmerge.org/?lang=eng) is another excellent tool to easily locate, examine and process the differences between various versions of same documents, predominantly program sources. I'm using it on a day-to-day basis.)
A simpler alternative is to embed the debugger interface, as o2 source code which could be included in any program being tested. This would make it much easier to access variables and structuresI'm sure that will limit the debug possibilities. If the goal is just to follow the execution ok but to see the variable values and other nice features not possible. Trust me. Just have a look to the chm file. I could later explain how a debugger works.
It requires a very small addition to o2, for invoking the debugger per-procedure or per-line.
Lorand (same pronunciation in french than Laurent)