fbdbg  3.0
FreeBASIC Debugger
fbdbg2_defines.bi
Go to the documentation of this file.
1 
6 
7 '===================================
8 #Define fmt(t,l) Left(t,l)+Space(l-Len(t))+" "
9 #Define fmt2(t,l) Left(t,l)+Space(l-Len(t))
10 ' for proc_find / thread
11 #Define KFIRST 1
12 #Define KLAST 2
13 
14 #include Once "vbcompat.bi" 'for use of filedatetime
15 'for linux : lnx
16 'for windows : wnd
17 #Ifdef __FB_LINUX__
18 
19  TYPE AS ANY PTR HWND, HANDLE '' temp. workaround to make it compile under LINUX
20 
21  'ReadProcessMemory(dbghand,Cast(LPCVOID,adr),@adr,4,0)
22 
23  'WriteProcessMemory(dbghand,Cast(LPVOID,rline(linenb).ad),@rLine(linenb).sv,1,0)
24 #Else
25  #Ifdef __FB_WIN32__
26  ' DBG_EXCEPTION_NOT_HANDLED = &H80010001
27  #Define EXCEPTION_GUARD_PAGE_VIOLATION &H80000001
28  #Define EXCEPTION_NO_MEMORY &HC0000017
29  #Define EXCEPTION_FLOAT_DENORMAL_OPERAND &HC000008D
30  #Define EXCEPTION_FLOAT_DIVIDE_BY_ZERO &HC000008E
31  #Define EXCEPTION_FLOAT_INEXACT_RESULT &HC000008F
32  #Define EXCEPTION_FLOAT_INVALID_OPERATION &HC0000090
33  #Define EXCEPTION_FLOAT_OVERFLOW &HC0000091
34  #Define EXCEPTION_FLOAT_STACK_CHECK &HC0000092
35  #Define EXCEPTION_FLOAT_UNDERFLOW &HC0000093
36  #Define EXCEPTION_INTEGER_DIVIDE_BY_ZERO &HC0000094
37  #Define EXCEPTION_INTEGER_OVERFLOW &HC0000095
38  #Define EXCEPTION_PRIVILEGED_INSTRUCTION &HC0000096
39  #Define EXCEPTION_CONTROL_C_EXIT &HC000013A
40 
41  '=============== Because collision with some defines from windows (atom and colormap) ===============
42  #Ifdef atom
43  #Undef atom
44  #EndIf
45  #Ifdef colormap
46  #Undef colormap
47  #EndIf
48  '================ end of special defines ========================
49  #Include Once "windows.bi"
50  #Include Once "win\commctrl.bi"
51  #Include Once "win\commdlg.bi"
52  #Include Once "win\tlhelp32.bi"
53  #Include Once "win\shellapi.bi"
54  #Include Once "win\psapi.bi"
55  #EndIf
56 #EndIf
57 
58 
59 Union pointeurs
60 pxxx As Any Ptr
61 pinteger As Integer Ptr
62 puinteger As UInteger Ptr
63 psingle As Single Ptr
64 pdouble As Double Ptr
65 plinteger As LongInt Ptr
66 pulinteger As ULongInt Ptr
67 pbyte As Byte Ptr
68 pubyte As UByte Ptr
69 pshort As Short Ptr
70 pushort As UShort Ptr
71 pstring As String Ptr
72 pzstring As ZString Ptr
73 pwstring As WString Ptr
74 End Union
75 
76 Union valeurs
77 vinteger As Integer
78 vuinteger As UInteger
79 vsingle As Single
80 vdouble As Double
81 vlinteger As LongInt
82 vulinteger As ULongInt
83 vbyte As Byte
84 vubyte As UByte
85 vshort As Short
86 vushort As UShort
87 'vstring as string
88 'vzstring as zstring
89 'vwstring as wstring
90 End Union
91 
92 'BREAK ON LINE =================================================
93 Const BRKMAXI=10 'breakpoint index zero for "run to cursor"
94 Type breakol
95  isrc As UShort 'source index
96  nline As UInteger 'num line for display
97  index As Integer 'index for rline
98  ad As UInteger 'address
99  typ As Byte 'type normal=1 /temporary=0, 3 or 4 =disabled
100 End Type
101 Dim Shared brkol(BRKMAXI) As breakol,brknb As Byte
102 Dim Shared As String brkexe(9,BRKMAXI) 'to save breakpoints by session
103 'break on var =================================================
104 Type tbrkv
105  typ As Integer 'type of variable
106  adr As UInteger 'address
107  arr As UInteger 'adr if dyn array
108  ivr As Integer 'variable index
109  psk As Integer 'stack proc
110  Val As valeurs 'value
111  vst As String 'value as string
112  tst As Byte=1 'type of comparison (1 to 6)
113  ttb As Byte 'type of comparison (16 to 0)
114  txt As String 'name and value just for brkv_box
115 End Type
116 Dim Shared brkv As tbrkv
117 Dim Shared brkv2 As tbrkv 'copie for use inside brkv_box
118 'WATCHED =================================================
119 Const WTCHMAIN=3
120 Const WTCHMAXI=9
121 Const WTCHALL=9999999
122 Type twtch
123  'hnd As HWND 'handle TODO to be removed create 4 boxes ????
124  tvl As GtkTreeIter ptr 'tview handle
125  adr As UInteger 'memory address
126  typ As Integer 'type for var_sh2
127  pnt As Integer 'nb pointer
128  ivr As Integer 'index vrr
129  psk As UInteger 'stk procr or -1 (empty)/-2 (memory)/-3 (non-existent local var)/-4 (session)
130  lbl As String 'name & type,etc
131  arr As UInteger 'ini for dyn arr
132  tad As Integer 'additionnal type
133  old As String 'keep previous value for tracing
134  idx As Integer 'index proc only for local var
135  dlt As Integer 'delta on stack only for local var
136  vnb As Integer 'number of level
137  vnm(10) As String 'name of var or component
138  vty(10) As String 'type
139  Var As Integer 'array=1 / no array=0
140 End Type
141 'TODO remove this line ? --> dim shared As Gtk_Tree ptr wtchtree
142 Dim Shared wtch(wtchmaxi) As twtch
143 Dim Shared wtchcpt As Long 'counter of watched value, used for the menu
144 'Dim Shared hwtchbx As HWND 'handle to manage duplicate watched var
145 Dim Shared wtchidx As Integer 'index for delete
146 Dim Shared wtchexe(9,wtchmaxi) As String 'watched var (no memory for next execution)
147 Dim Shared wtchnew As Integer 'to keep index after creating new watched
148 'status area =================================================
149 'empty
150 
151 'dump memory address
152 Dim Shared As UInteger dumpadr
153 'breakvar
154 'TODO handle under Gtk 'Dim Shared brkvhnd As Gtk_box Ptr 'handle
155 
156 'in case of module or DLL the udt number is initialized each time
157 Dim Shared As Integer udtcpt,udtmax 'current, max cpt
158 'dwarf management
159 Dim Shared As Long udtbeg,cudtbeg,locbeg,vrbbeg,prcbeg
160 'excluded lines for procs added in dll (DllMain and tmp$x)
161 Const EXCLDMAX=10
162 Type texcld
163  db As UInteger
164  fn As UInteger
165 End Type
166 Dim Shared As Long excldnb
167 Dim Shared As texcld excldlines(EXCLDMAX)
168 'GCC
169 Dim Shared As Byte gengcc ' flag for compiled with gcc
170 ReDim Shared As String Trans()
171 Dim Shared As String stringarray
172 'type of running
173 Enum
174  RTRUN
175  RTSTEP
176  RTAUTO
177  RTOFF
178  RTFRUN
179  RTFREE
180  RTEND
181 End Enum
182 Dim Shared As Byte runtype=RTOFF 'running type
183 
184 Enum 'code stop
185  CSSTEP=0
186  CSCURSOR
187  CSBRKTEMPO
188  CSBRK
189  CSBRKV
190  CSBRKM
191  CSHALTBU
192  CSACCVIOL
193  CSNEWTHRD
194  CSEXCEP
195 End Enum
196 
197 Dim Shared As Integer autostep=200 'delay for auto step
198 ' reasons of stopping
199 Dim Shared stopcode As Integer
200 Dim Shared As ZString Ptr stoplibel(9)
201 
202 Dim Shared breakcpu As Integer =&hCC
203 'THREAD ==========================================================
204 Type tthread
205 #Ifdef __FB_UNIX__
206 'todo add the define handle for thread under linux
207 #Else
208  hd As HANDLE 'handle
209 #EndIf
210  id As UInteger 'ident
211  pe As Integer 'flag if true indicates proc end
212  sv As Integer 'sav line
213  od As Integer 'previous line
214  nk As UInteger 'for naked proc, stack and used as flag
215  st As Integer 'to keep starting line 09/12/2012
216  tv As GtkTreeIter Ptr 'to keep handle of thread item '12/12/2012
217  plt As GtkTreeIter Ptr 'to keep handle of last proc of thread in proc/var tview '12/12/2012
218  ptv As GtkTreeIter ptr 'to keep handle of last proc of thread in thread tview '12/12/2012
219  exc As Integer 'to indicate execution in case of auto 1=yes, 0=no '17/03/2013
220 End Type
221 Const THREADMAX=50
222 Dim Shared thread(THREADMAX) As tthread
223 Dim Shared threadnb As Integer =-1
224 Dim Shared threadcur As Integer
225 Dim Shared threadprv As Integer 'previous thread used when mutexunlock released thread or after thread create 12/02/2013
226 Dim Shared threadsel As Integer 'thread selected by user, used to send a message if not equal current
227 Dim Shared threadaut As Integer 'number of threads for change when auto executing
228 Dim Shared dbgprocid As Integer 'pinfo.dwProcessId : debugged process id
229 Dim Shared dbgthreadID As Integer 'pinfo.dwThreadId : debugged thread id
230 #Ifdef __FB_UNIX__
231 'todo add the define handle for debuggee/thread under linux
232 #Else
233  Dim Shared threadcontext As HANDLE
234  Dim Shared threadhs As HANDLE 'handle thread to resume
235  Dim Shared dbghand As HANDLE 'debugged proc handle
236  Dim Shared dbghthread As HANDLE 'debuggee thread handle
237  Dim Shared dbghfile As HANDLE 'debugged file handle
238 #EndIf
239 
240 Dim Shared prun As Integer 'indicateur process running
241 
242 Dim Shared curline As Long 'current next executed line
243 
244 #Ifdef __FB_WIN32__
245  Dim Shared pinfo As PROCESS_INFORMATION 'todo if windows
246 #EndIf
247 ' compiler,commandline for compilation and for debug
248 Dim Shared As String fbcexe,cmdlfbc,ideexe
249 Dim Shared exename As ZString *300 'debuggee executable
250 Dim Shared exedate As Double 'serial date
251 Dim Shared savexe(9) As String 'last 10 exe, 0=more recent
252 Dim Shared cmdexe(9) As String 'last 10 exe
253 
254 Dim Shared flaglog As Byte=0 ' flag for dbg_prt 0 --> no output / 1--> only screen / 2-->only file / 3 --> both
255 Dim Shared flagtrace As Byte ' flag for trace mode : 1 proc / +2 line
256 Dim Shared flagverbose As Byte ' flag for verbose mode
257 Dim Shared flagmain As Byte ' flag for first main
258 Dim Shared flagattach As Byte ' flag for attach
259 Dim Shared flagtooltip As Integer =TRUE 'TRUE=activated/FALSE=DESACTIVATED
260 Dim Shared flagrestart As Integer=-1 'flag to indicate restart in fact number of bas files to avoid to reload those files
261 Dim Shared flagwtch As Integer =0 'flag =0 clean watched / 1 no cleaning in case of restart
262 Dim Shared flagfollow As Integer =FALSE 'flag to follow next executed line on focus window
263 Dim Shared flagkill As Integer =FALSE 'flag if killing process to avoid freeze in thread_del
264 Dim Shared flagtuto As Integer 'flag for tutorial -1=no tuto / 2=let execution then return at value 1 / 1=tutorial so no possible command '03/01/2013
265 Dim Shared As Integer flagmodule,flagunion 'flag for dwarf
266 Dim Shared As Long dwlastprc,dwlastlnb 'to manage end of proc
267 Dim Shared compinfo As String 'information about compilation
268 #Ifdef __FB_UNIX__
269  'todo add the define handle for attached debuggee linux
270 #Else
271 Dim Shared hattach As HANDLE 'handle to signal attchement done
272 #EndIf
273 
274 Dim Shared jitprev As String
275 Dim Shared fasttimer As Double
276 'Running variables ==============================================
277 Const VRRMAX=100000
278 Type tvrr
279  ad As UInteger 'address
280  tv As GtkTreeIter Ptr 'tview handle
281  vr As Integer 'variable if >0 or component if <0
282  ini As UInteger 'dyn array address (structure) or initial address in array
283  gofs As UInteger 'global offset to optimise access
284  ix(4) As Integer '5 index max in case of array
285 End Type
286 Dim Shared vrr(VRRMAX) As tvrr
287 Dim Shared vrrnb As UInteger
288 '===== DLL ==================================================
289 Type tdll
290 #Ifdef __FB_UNIX__
291 'todo add the define handle dll (so) under linux
292 #Else
293  As HANDLE hdl 'handle to close
294 #EndIf
295  As UInteger bse 'base address
296  As GtkTreeIter Ptr tv 'item treeview to delete
297  As Integer gblb 'index/number in global var table
298  As Integer gbln
299  As Integer lnb 'index/number in line '01/02/2013
300  As Integer lnn
301  As String fnm 'full name
302 End Type
303 Const DLLMAX=300
304 Dim Shared As tdll dlldata(DLLMAX)
305 Dim Shared As Integer dllnb 'use index base 1
306 #Define dbg2
307 
308 'SOURCES =================================================
309 Const MAXSRC=200 'max 200 sources
310 Type tsource
311  fullname As String 'full name
312  shortname As String 'source names
313  comptytp As Long 'flag to keep the used compil option (gas=0, gcc=1, gcc+dwarf=2)
314 End Type
315 Dim Shared dbgsrc As String 'current source
316 Dim Shared dbgmaster As Integer 'index master source if include
317 Dim Shared dbgmain As Integer 'index main source proc entry point, to update dbgsrc see load_sources
318 Dim Shared As tsource source(MAXSRC) 'data about every source
319 'Dim Shared source(MAXSRC) As String 'source names
320 'Dim Shared srccomp(MAXSRC) As Integer 'flag to keep the used compil option (gas=0, gcc=1, gcc+dwarf=2)
321 Dim Shared sourcenb As long =-1 'number of src
322 Dim Shared As String compdir 'compil directory (dwarf)
323 
324 'line ==============================================
325 Const LINEMAX=100000
326 Type tline
327  ad As UInteger
328  nu As Integer
329  sv As Byte
330  pr As UShort
331  hp As Integer
332  hn As Integer
333 End Type
334 Dim Shared As Integer linenb,rlineold 'numbers of lines, index of previous executed line (rline) '14/12/2012
335 Dim Shared As Integer linenbprev 'used for dll
336 Dim Shared rline(LINEMAX) As tline
337 'DIM ARRAY =========================================
338 Const ARRMAX=1500
339 Type tnlu
340  lb As UInteger
341  ub As UInteger
342 End Type
343 Type tarr 'five dimensions max
344  dm As UInteger
345  nlu(5) As tnlu
346 End Type
347 Dim Shared arr(ARRMAX) As tarr,arrnb As Integer
348 'var =============================
349 Const VARMAX=20000 'CAUTION 3000 elements taken for globals
350 Const VGBLMAX=3000 'max globals
351 Const KBLOCKIDX=100 'max displayed lines inside index selection
352 Type tvrb
353  nm As String 'name
354  typ As Integer 'type
355  adr As Integer 'address or offset
356  mem As UByte 'scope
357  arr As tarr Ptr 'pointer to array def
358  pt As long 'pointer
359 End Type
360 Dim Shared vrbloc As Integer 'pointer of loc variables or components (init VGBLMAX+1)
361 
362 Dim Shared vrbgbl As Integer 'pointer of globals or components
363 Dim Shared vrbgblprev As Integer '26/01/2013 for dll, previous value of vrbgbl, initial 1
364 Dim Shared vrbptr As Integer Ptr 'equal @vrbloc or @vrbgbl
365 Dim Shared vrb(VARMAX) As tvrb
366 'proc (sub or function) ============================
367 Const PROCMAX=20000 'in sources
368 Enum
369  KMODULE=0 'used with IDSORTPRC
370  KPROCNM
371 End Enum
372 
373 Type tproc
374  nm As String 'name
375  db As UInteger 'lower address
376  fn As UInteger 'upper address
377  sr As UShort 'source index
378  nu As Long 'line number to quick access
379  vr As UInteger 'lower index variable upper (next proc) -1
380  rv As Integer 'return value type
381  pt As Integer 'counter pointer for return value (** -> 2)
382  tv As GtkTreeIter Ptr 'index for proctree
383  st As Byte 'state followed = not checked
384 End Type
385 Dim Shared proc(PROCMAX) As tproc
386 Dim Shared procnb As Integer
387 Dim Shared As UInteger procsv,procad,procin,procsk,proccurad,procesp,procfn,procbot,proctop,procsort
388 
389 
390 'running proc (sub or function) ============================
391 Const PROCRMAX=50000 'Running proc
392 Type tprocr
393  sk As UInteger 'stack
394  idx As UInteger 'index for proc
395  tv As GtkTreeIter Ptr 'index for treeview
396  'lst as uinteger 'future array in LIST
397  cl As Integer 'calling line
398  thid As Integer 'idx thread
399  vr As Integer 'lower index running variable upper (next proc) -1
400 End Type
401 Dim Shared procr(PROCRMAX) As tprocr,procrnb As Integer 'list of running proc
402 'UDT ==============================
403 Type tudt
404  nm As String 'name of udt
405  lb As Integer 'lower limit for components
406  ub As Integer 'upper
407  lg As Integer 'lenght
408  en As Integer 'flag if enum 1 or 0
409  index As Integer 'dwarf
410  what As Integer 'dwarf udt/pointer/array
411  typ As Integer 'dwarf
412  dimnb As Long 'dwarf
413  bounds(5) As UInteger 'dwarf
414 End Type
415 Type tcudt
416  nm As String 'name of components or text for enum
417  Union
418  typ As Integer 'type
419  Val As Integer 'value for enum
420  End Union
421  ofs As UInteger 'offset
422  ofb As UInteger 'rest offset bits
423  lg As UInteger 'lenght
424  arr As tarr Ptr 'arr ptr
425  pt As Long
426 End Type
427 Const TYPEMAX=80000,CTYPEMAX=100000
428 'CAUTION : TYPEMAX is the type for bitfield so the real limit is typemax-1
429 Dim Shared udt(TYPEMAX) As tudt,udtidx As Integer
430 Dim Shared cudt(CTYPEMAX) As tcudt,cudtnb As Integer,cudtnbsav As Integer
431 '===============================
432 
433 'check if local not possible
434 Dim Shared As Integer stff '(stabs) freefile LOCAL ???
435 Dim Shared As String stln '(dwarf) line read LOCAL ???
436 'end of check
437 Dim Shared As String exepath2
438 
439 Dim Shared As Long sourceix
440 
441 
442 Enum 'type udt/redim/dim
443  TYUDT
444  TYRDM
445  TYDIM
446 End Enum
447 'VAR FIND
448 Type tvarfind
449  ty As Integer
450  pt As Integer
451  nm As String 'var name or description when not a variable
452  pr As Integer 'index of running var parent (if no parent same as ivr)
453  ad As UInteger
454  iv As Integer 'index of running var
455  tv As GtkTreeIter ptr 'handle treeview
456  tl As GtkTreeIter Ptr 'handle line
457 End Type
458 Dim Shared As tvarfind varfind
459 'BOOKMARK
460 Type tbmk
461  nline As Integer 'bookmark line
462  ntab As Integer 'bookmark tab number, =0--> empty
463 End Type
464 Const BMKMAX=10
465 Dim Shared As tbmk bmk(BMKMAX)
466 Dim Shared As Integer bmkcpt 'bmk counter
467 '====================== DECLARATIONS ========================
468 Declare Sub re_ini()
469 Declare Function kill_process(text As String) As Integer
470 declare Sub source_load(srcfirst As Long)
471 Declare Sub filechoose()
472 Declare Sub simple_message(line1 As String,line2 As String=" ")
473 '===================
474 Declare Sub frground()
475 Declare Function wait_debug() As Integer
476 Declare Sub start_pgm(p As Any Ptr)
477 Declare Function thread_select(id As Integer =0) As Integer
478 Declare Sub thread_text(thd As Integer=-1)
479 Declare Sub thread_rsm()
480 Declare Sub dbg_prt(t As String)
481 Declare Sub dsp_change(index As Integer)
482 Declare Sub close_all
483 Declare Sub var_ini(j As UInteger ,bg As Integer ,ed As Integer)
484 Declare Sub var_fill(i As Integer)
485 Declare Function var_search(pproc As Integer,text() As String,vnb As Integer,varr As Integer,vpnt As Integer=0) As Integer
486 Declare Sub watch_add(f As Integer,r As Integer =-1)
487 Declare Sub watch_del(i As Integer=WTCHALL)
488 Declare Sub watch_array()
489 Declare Sub watch_sh(aff As Integer=WTCHALL)
490 Declare Sub var_sh()
491 Declare Sub str_replace(strg As String,srch As String, repl As String)
492 #Ifdef __FB_UNIX__
493 'todo add the declare under linux
494 #Else
495  Declare Function dll_name(FileHandle As HANDLE,t As Integer =1 )As String
496 #EndIf
497 
498 Declare Sub var_iniudt(Vrbe As UInteger,adr As UInteger,tv As GtkTreeIter ptr,voffset As UInteger)
499 Declare Function var_sh1(i As Integer) As String
500 Declare Function var_sh2(As Integer,As UInteger, As UByte=0,As String="") As String
501 'Declare Sub dsp_line(newtab As Long =curtab,newline As Long=curline)
502 Declare Sub ini_main
503 '============================================================
504