Access violation (in _d_invariant)
    Lionello Lunesu 
    lio at lunesu.remove.com
       
    Tue May 23 10:53:23 PDT 2006
    
    
  
I've recompiled phobos/dmgc with -g -debug and got some more debug info.
void _d_invariant(Object o)
004057A0  enter       8,0
004057A4  push        ebx
004057A5  push        esi
004057A6  mov         dword ptr [ebp-8],eax
{   ClassInfo c;
004057A9  mov         dword ptr [c],0
     //printf("__d_invariant(%p)\n", o);
     // BUG: needs to be filename/line of caller, not library routine
     assert(o !is null);	// just do null check, not invariant check
004057B0  cmp         dword ptr [o],0
004057B4  jne         +20h (4057C0h)
004057B6  mov         eax,0Eh
004057BB  call        _assert_9invariant (4057F0h)
     c = o.classinfo;
004057C0  mov         ecx,dword ptr [o]
004057C3  mov         edx,dword ptr [ecx]
 >>>004057C5  mov         ebx,dword ptr [edx]
EAX = 01C64AC0 EBX = 00439214 ECX = 01C64AC0 EDX = 00000000
ESI = 00402124 EDI = 01C33A30 EIP = 004057C5
ESP = 0781F740 EBP = 0781F750 EFL = 00010206
void _d_invariant(Object o)
{   ClassInfo c;
     //printf("__d_invariant(%p)\n", o);
     // BUG: needs to be filename/line of caller, not library routine
     assert(o !is null);	// just do null check, not invariant check
 >>>    c = o.classinfo;
     do
     {
	if (c.classInvariant)
	{
	    (*c.classInvariant)(o);
	}
	c = c.base;
     } while (c);
}
'o' is set, but its vptr is null; also o.monitor is null.
Lio.
By the way, I had to tweak quite a lot in win32.mak to get it to work :S
    
    
More information about the Digitalmars-d-bugs
mailing list