DMD's codeview types for arrays

Bill Baxter dnewsgroup at billbaxter.com
Sun Jan 21 18:07:37 PST 2007


Excellent!  Keep up the good work!
So how far are you from having a fully usable debugger that works with 
plain, unmangled D source?

--bb

Jascha Wetzel wrote:
> Walter Bright wrote:
>> Jascha Wetzel wrote:
>>> Walter Bright wrote:
>>>> That's possible. What debugger are you using?
>>> I'm writing it ;)
>> Ahh, I see now.
> 
> I've put together an alpha version of my debugger, that uses mangled
> types, if available, in all symbol names to interpret the data at runtime:
> http://mainia.de/ddbg-0.1-alpha.zip
> 
> Included is a test program that declares some of it's variables with
> mangled typenames, as i explained before. Some array expression
> evaluation already works if enough type information is available.
> Slicing only works for char arrays, yet.
> Here is an example debug session with the files from the above archive:
> 
> C:>ddbg.exe debuggee.exe
> Process started
> ntdll.dll loaded
> KERNEL32.dll loaded
> USER32.dll loaded
> GDI32.dll loaded
> Unknown breakpoint hit at 0x7C901230
> ->lsm
> src\debuggee.d
> ->bp deb:45
> Breakpoint set: src\debuggee.d:45 0x40217c
> ->r
> IMM32.dll loaded
> ADVAPI32.dll loaded
> RPCRT4.dll loaded
> LPK.dll loaded
> USP10.dll loaded
> msvcrt.dll loaded
> Breakpoint 0 hit src\debuggee.d:45 0x40217c
>         if ( _D4argsAAa.length > 1 )
> ->ov
> src\debuggee.d:48 0x40219d
>                 writefln("No arguments today, boring...");
> ->
> No arguments today, boring...
> src\debuggee.d:50 0x4021b6
>         uint[] _D4testGk = [0xdeadbeef, 0xbaadf00d, 0xf00baaa];
> ->
> src\debuggee.d:51 0x4021db
>         int index = 1;
> ->
> src\debuggee.d:52 0x4021e2
>         uint num_chars = printArgs(_D4argsAAa);
> ->in
> src\debuggee.d:24 0x402080
> uint printArgs(char[][] _D4argsAAa)
> ->bp deb:38
> Breakpoint set: src\debuggee.d:38 0x402157
> ->r
> arg #0: C:\Documents and Settings\jascha\My
> Documents\working\ddbg\debuggee.exe
> Breakpoint 1 hit src\debuggee.d:38 0x402157
>         qwer q = new asdf;
> ->lsv
> Scope: uint debuggee.printArgs(char[][])
> char[][] args [ebp+8]   = ["C:\Documents and Settings\jascha\My
> Documents\working\ddbg\debuggee.exe"]
> uint numchars [ebp-72]  = 0x0000004f
> char[] test [ebp-64]    = "asdfqwer1234"
> float[] ztui [ebp-56]   = [234.657806]
> void* _TMP1 [ebp-48]    = 0x0012ff54
> ulong _TMP2 [ebp-40]    = 0x0012ff5400000001
> int i [ebp-32]  = 1
> char[] a [ebp-24]       = "C:\Documents and Settings\jascha\My
> Documents\working\ddbg\debuggee.exe"
> char[] numstr [ebp-16]  = "0"
>  [ebp-8]        = Symbol q has unknown type (ddl says: [custom: 0x1003]
> q [bp-8])
> ->= ztui[0]
> 234.657806
> ->= args[0][0..12]
> "C:\Documents"
> ->da
> src\debuggee.d:38       qwer q = new asdf;
> 00402157: 6808414100              push dword 0x414108
> 0040215c: e8e3010000              call 0x402344
> 00402161: 8945f8                  mov [ebp-0x8], eax
> src\debuggee.d:39       q.test2();
> 00402164: 8b18                    mov ebx, [eax]
> 00402166: ff5318                  call dword near [ebx+0x18]
> src\debuggee.d:40       return numchars;
> 00402169: 8b45b8                  mov eax, [ebp-0x48]
> 0040216c: 83c404                  add esp, 0x4
> src\debuggee.d:41 }
> 0040216f: 5f                      pop edi
> 00402170: 5e                      pop esi
> 00402171: 5b                      pop ebx
> 00402172: c9                      leave
> 00402173: c20800                  ret 0x8
> ->q



More information about the Digitalmars-d mailing list