pain and agony... a +relay,+seh trace from my cxxexcept problem case:

Greg Turner gmturner007 at ameritech.net
Thu Oct 3 17:51:29 CDT 2002


OK, here is what looks to me like the relevant stuff... I'm determined to
get this fixed, I "need" this app (ya right... I've got vmware...)

=================>
0807bf40:Ret  ws2_32.recv() retval=00000010 ret=410d966a
0807bf40:Call ws2_32.recv(00000174,42a908b0,0000004d,00000000) ret=410d966a
0807bf40:Call ntdll.wine_server_handle_to_fd(00000174,80000000,406f1cec,406f1d54,406f1d64) ret=411976f5
0807bf40:Ret  ntdll.wine_server_handle_to_fd() retval=00000000 ret=411976f5
0807bf40:Call kernel32.GetProcessHeap() ret=4119693e
0807bf40:Ret  kernel32.GetProcessHeap() retval=403d0000 ret=4119693e
0807bf40:Call ntdll.RtlAllocateHeap(403d0000,00000000,00000008) ret=4119695a
0807bf40:Ret  ntdll.RtlAllocateHeap() retval=404d1be8 ret=4119695a
0807bf40:Call kernel32.GetProcessHeap() ret=41196c0c
0807bf40:Ret  kernel32.GetProcessHeap() retval=403d0000 ret=41196c0c
0807bf40:Call ntdll.RtlFreeHeap(403d0000,00000000,404d1be8) ret=41196c25
0807bf40:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=41196c25
0807bf40:Ret  ws2_32.recv() retval=0000004d ret=410d966a
0807bf40:Call msvcrt.malloc(00000008) ret=5f40384f
0807bf40:Call kernel32.GetProcessHeap() ret=40f216bf
0807bf40:Ret  kernel32.GetProcessHeap() retval=403d0000 ret=40f216bf
0807bf40:Call ntdll.RtlAllocateHeap(403d0000,00000000,00000008) ret=40f216d6
0807bf40:Ret  ntdll.RtlAllocateHeap() retval=404d1be8 ret=40f216d6
0807bf40:Ret  msvcrt.malloc() retval=404d1be8 ret=5f40384f
<================

so far, so good, right? Looks like pretty normal stuff going on here;
the exception is raised by proprietary code within starteam, but they
like to catch their own exceptions, I think it's supposed to pass
and be handled.  In the debugger, the stack looks great, goes back
cleanly all the way to init.

=================>
0807bf40:Call msvcrt._CxxThrowException(406f1f4c,410dff80) ret=410d4d0a
0807bf40:Call kernel32.RaiseException(e06d7363,00000001,00000003,406f1e24) ret=40f15b9e
trace:seh:EXC_RtlRaiseException code=e06d7363 flags=1 addr=0x401060f4
trace:seh:EXC_RtlRaiseException  info[0]=19930520
trace:seh:EXC_RtlRaiseException  info[1]=406f1f4c
trace:seh:EXC_RtlRaiseException  info[2]=410dff80
trace:seh:EXC_CallHandler calling handler at 0x410de5e6 code=e06d7363 flags=1
0807bf40:Call msvcrt.__CxxFrameHandler(406f1cc4,406f1f68,406f1960,406f1940) ret=4010c420 fs=008f
 eax=410dff20 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f1f70 edi=406f195c
 ebp=406f18a4 esp=406f1860 ds=002b es=002b gs=0000 flags=00000212
0807bf40:Ret  msvcrt.__CxxFrameHandler() retval=00000001 ret=4010c420 fs=008f
 eax=00000001 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f1f70 edi=406f195c
 ebp=406f18a4 esp=406f1860 ds=002b es=002b gs=0000 flags=00000212
trace:seh:EXC_CallHandler handler returned 1
<===============

OK, one handler called, ExceptionContinueSearch.  now here comes something more
significant....

=============>
trace:seh:EXC_CallHandler calling handler at 0x410de4b4 code=e06d7363 flags=1
0807bf40:Call msvcrt.__CxxFrameHandler(406f1cc4,406f1fc8,406f1960,406f1940) ret=4010c420 fs=008f
 eax=410dfc20 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f1fd0 edi=406f195c
 ebp=406f18a4 esp=406f1860 ds=002b es=002b gs=0000 flags=00000212
trace:seh:cxx_frame_handler handling C++ exception rec 0x406f1cc4 frame 0x406f1fc8 trylevel 0 descr 0x410dfc20
exception type:
flags 0 destr (nil) handler (nil) type info 0x410dff68
    0: flags 1 type 0x410e4400 ((nil) .PAVCStCommandExceptionDetected@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    1: flags 1 type 0x410e43e0 ((nil) .PAVCException@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    2: flags 1 type 0x410e4440 ((nil) .PAVCObject@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    3: flags 1 type 0x410e4430 ((nil) .PAX) offset 0 vbase -1,0 size 4 copy ctor (nil)
function descr:
magic 19930520
unwind table: 0x410dfc40 4
    0: prev -1 func (nil)
    1: prev -1 func (nil)
    2: prev 1 func (nil)
    3: prev 1 func (nil)
try table: 0x410dfc60 2
    0: start 2 end 2 catchlevel 3 catch 0x410dfc88 1
        0: flags 0 offset -28 handler 0x410d2b63 type 0x410e43e0 ((nil) .PAVCException@@)
    1: start 0 end 0 catchlevel 3 catch 0x410dfc98 2
        0: flags 0 offset -24 handler 0x410d2b36 type 0x410e4400 ((nil) .PAVCStCommandExceptionDetected@@)
        1: flags 0 offset 0 handler 0x410d2b52 type (nil)
trace:seh:call_catch_block matched type 0x410dff48 in tryblock 1 catchblock 0
<============

allright, obviously we're in cxx_frame_handler, at "normal_handler:".  So far,
everyone seems happy.  Off we go into call_catch_block 

============>
trace:seh:EXC_RtlUnwind code=e06d7363 flags=3
trace:seh:EXC_CallHandler calling handler at 0x4010c310 code=e06d7363 flags=3
trace:seh:EXC_CallHandler handler returned 1
trace:seh:EXC_CallHandler calling handler at 0x410de5e6 code=e06d7363 flags=3
0807bf40:Call msvcrt.__CxxFrameHandler(406f1cc4,406f1f68,406f0ea4,406f0dd8) ret=4010c420 fs=008f
 eax=410dff20 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f1f70 edi=406f0ea0
 ebp=406f0da0 esp=406f0d5c ds=002b es=002b gs=0000 flags=00000216
0807bf40:Ret  msvcrt.__CxxFrameHandler() retval=00000001 ret=4010c420 fs=008f
 eax=00000001 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f1f70 edi=406f0ea0
 ebp=406f0da0 esp=406f0d5c ds=002b es=002b gs=0000 flags=00000216
trace:seh:EXC_CallHandler handler returned 1
0807bf40:Ret  ntdll.RtlUnwind() retval=00000000 ret=40f15d99
<==========

Presumably we're still in call_catch_block, really justin the RtlUnwind parts.  
Now the catch block is called...

============>
trace:seh:call_catch_block calling catch block 0x410dfc98 for type 0x410dff48 addr 0x410d2b36 ebp 0x406f1fd4
0807bf40:Call msvcrt.free(404d1be8) ret=5f40388b
0807bf40:Call kernel32.GetProcessHeap() ret=40f21687
0807bf40:Ret  kernel32.GetProcessHeap() retval=403d0000 ret=40f21687
0807bf40:Call ntdll.RtlFreeHeap(403d0000,00000000,404d1be8) ret=40f216a0
0807bf40:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=40f216a0
0807bf40:Ret  msvcrt.free() retval=00000001 ret=5f40388b
0807bf40:Call msvcrt.malloc(00000050) ret=5f40384f
0807bf40:Call kernel32.GetProcessHeap() ret=40f216bf
0807bf40:Ret  kernel32.GetProcessHeap() retval=403d0000 ret=40f216bf
0807bf40:Call ntdll.RtlAllocateHeap(403d0000,00000000,00000050) ret=40f216d6
0807bf40:Ret  ntdll.RtlAllocateHeap() retval=404d55d8 ret=40f216d6
0807bf40:Ret  msvcrt.malloc() retval=404d55d8 ret=5f40384f
0807bf40:Call msvcrt.memcpy(406f1234,42a908b0,00000004) ret=410d4a2e
0807bf40:Ret  msvcrt.memcpy() retval=406f1234 ret=410d4a2e
0807bf40:Call msvcrt.memcpy(406f11fc,42a908b4,00000012) ret=410d4a2e
0807bf40:Ret  msvcrt.memcpy() retval=406f11fc ret=410d4a2e
0807bf40:Call ntdll.RtlEnterCriticalSection(5f4d0088) ret=5f4020bd
0807bf40:Ret  ntdll.RtlEnterCriticalSection() retval=00000000 ret=5f4020bd
0807bf40:Call ntdll.RtlLeaveCriticalSection(5f4d0088) ret=5f402103
0807bf40:Ret  ntdll.RtlLeaveCriticalSection() retval=00000000 ret=5f402103
0807bf40:Call msvcrt.memcpy(42a902c0,5f4d1b58,00000001) ret=5f402676
0807bf40:Ret  msvcrt.memcpy() retval=42a902c0 ret=5f402676
0807bf40:Call msvcrt.memcpy(406f1234,42a908c6,00000004) ret=410d4a2e
0807bf40:Ret  msvcrt.memcpy() retval=406f1234 ret=410d4a2e
0807bf40:Call msvcrt.memcpy(406f1294,42a908ca,00000004) ret=410d4a2e
0807bf40:Ret  msvcrt.memcpy() retval=406f1294 ret=410d4a2e
0807bf40:Call msvcrt.memcpy(406f1290,42a908ce,00000004) ret=410d4a2e
0807bf40:Ret  msvcrt.memcpy() retval=406f1290 ret=410d4a2e
0807bf40:Call msvcrt.memcpy(404d5600,42a908d2,00000004) ret=410d4a2e
0807bf40:Ret  msvcrt.memcpy() retval=404d5600 ret=410d4a2e
0807bf40:Call msvcrt.memcpy(404d55f8,42a908d6,00000008) ret=410d4a2e
0807bf40:Ret  msvcrt.memcpy() retval=404d55f8 ret=410d4a2e
0807bf40:Call msvcrt.memcpy(406f1234,42a908de,00000004) ret=410d4a2e
0807bf40:Ret  msvcrt.memcpy() retval=406f1234 ret=410d4a2e
0807bf40:Call msvcrt.memcpy(406f11f8,42a908e2,00000017) ret=410d4a2e
0807bf40:Ret  msvcrt.memcpy() retval=406f11f8 ret=410d4a2e
0807bf40:Call ntdll.RtlEnterCriticalSection(5f4d0088) ret=5f4020bd
0807bf40:Ret  ntdll.RtlEnterCriticalSection() retval=00000000 ret=5f4020bd
0807bf40:Call ntdll.RtlLeaveCriticalSection(5f4d0088) ret=5f402103
0807bf40:Ret  ntdll.RtlLeaveCriticalSection() retval=00000000 ret=5f402103
0807bf40:Call msvcrt.memcpy(42a90310,5f4d1b58,00000001) ret=5f402676
0807bf40:Ret  msvcrt.memcpy() retval=42a90310 ret=5f402676
0807bf40:Call msvcrt.memcpy(406f122c,42a908f9,00000004) ret=410d4a2e
0807bf40:Ret  msvcrt.memcpy() retval=406f122c ret=410d4a2e
0807bf40:Call msvcrt.malloc(00000194) ret=5f40384f
0807bf40:Call kernel32.GetProcessHeap() ret=40f216bf
0807bf40:Ret  kernel32.GetProcessHeap() retval=403d0000 ret=40f216bf
0807bf40:Call ntdll.RtlAllocateHeap(403d0000,00000000,00000194) ret=40f216d6
0807bf40:Ret  ntdll.RtlAllocateHeap() retval=42aeaf30 ret=40f216d6
0807bf40:Ret  msvcrt.malloc() retval=42aeaf30 ret=5f40384f
0807bf40:Call msvcrt.memset(42aeaf30,00000000,00000194) ret=410d3b8b
0807bf40:Ret  msvcrt.memset() retval=42aeaf30 ret=410d3b8b
0807bf40:Call msvcrt._CxxThrowException(406f12b0,410dfdf8) ret=410d2f3c
<===============

The handler wants to raise a new exception.

===============>
0807bf40:Call kernel32.RaiseException(e06d7363,00000001,00000003,406f1190) ret=40f15b9e
trace:seh:EXC_RtlRaiseException code=e06d7363 flags=1 addr=0x401060f4
trace:seh:EXC_RtlRaiseException  info[0]=19930520
trace:seh:EXC_RtlRaiseException  info[1]=406f12b0
trace:seh:EXC_RtlRaiseException  info[2]=410dfdf8
trace:seh:EXC_CallHandler calling handler at 0x410de4e6 code=e06d7363 flags=1
0807bf40:Call msvcrt.__CxxFrameHandler(406f1030,406f12c8,406f0ccc,406f0cac) ret=4010c420 fs=008f
 eax=410dfce8 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f12d0 edi=406f0cc8
 ebp=406f0c10 esp=406f0bcc ds=002b es=002b gs=0000 flags=00000216
0807bf40:Ret  msvcrt.__CxxFrameHandler() retval=00000001 ret=4010c420 fs=008f
 eax=00000001 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f12d0 edi=406f0cc8
 ebp=406f0c10 esp=406f0bcc ds=002b es=002b gs=0000 flags=00000216
trace:seh:EXC_CallHandler handler returned 1
<===============

looks familiar, we're at normal_handler again, and calling call_catch_block once more...?

================>
trace:seh:EXC_CallHandler calling handler at 0x410de4b4 code=e06d7363 flags=1
0807bf40:Call msvcrt.__CxxFrameHandler(406f1030,406f1fc8,406f0ccc,406f0cac) ret=4010c420 fs=008f
 eax=410dfc20 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f1fd0 edi=406f0cc8
 ebp=406f0c10 esp=406f0bcc ds=002b es=002b gs=0000 flags=00000216
trace:seh:cxx_frame_handler handling C++ exception rec 0x406f1030 frame 0x406f1fc8 trylevel 1 descr 0x410dfc20
exception type:
flags 0 destr (nil) handler (nil) type info 0x410dfde0
    0: flags 1 type 0x410e4478 ((nil) .PAVCStBaseServerException@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    1: flags 1 type 0x410e4458 ((nil) .PAVCStException@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    2: flags 1 type 0x410e43e0 ((nil) .PAVCException@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    3: flags 1 type 0x410e4440 ((nil) .PAVCObject@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    4: flags 1 type 0x410e4430 ((nil) .PAX) offset 0 vbase -1,0 size 4 copy ctor (nil)
function descr:
magic 19930520
unwind table: 0x410dfc40 4
    0: prev -1 func (nil)
    1: prev -1 func (nil)
    2: prev 1 func (nil)
    3: prev 1 func (nil)
try table: 0x410dfc60 2
    0: start 2 end 2 catchlevel 3 catch 0x410dfc88 1
        0: flags 0 offset -28 handler 0x410d2b63 type 0x410e43e0 ((nil) .PAVCException@@)
    1: start 0 end 0 catchlevel 3 catch 0x410dfc98 2
        0: flags 0 offset -24 handler 0x410d2b36 type 0x410e4400 ((nil) .PAVCStCommandExceptionDetected@@)
        1: flags 0 offset 0 handler 0x410d2b52 type (nil)
0807bf40:Ret  msvcrt.__CxxFrameHandler() retval=00000001 ret=4010c420 fs=008f
 eax=00000001 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f1fd0 edi=406f0cc8
 ebp=406f0c10 esp=406f0bcc ds=002b es=002b gs=0000 flags=00000216
trace:seh:EXC_CallHandler handler returned 1
<============

looks like it wasn't interested...  Not sure if I really understand what happened there...

===========>
trace:seh:EXC_CallHandler calling handler at 0x410a5add code=e06d7363 flags=1
0807bf40:Call msvcrt.__CxxFrameHandler(406f1030,406f2108,406f0ccc,406f0cac) ret=4010c420 fs=008f
 eax=410ab3f8 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f2110 edi=406f0cc8
 ebp=406f0c10 esp=406f0bcc ds=002b es=002b gs=0000 flags=00000216
trace:seh:cxx_frame_handler handling C++ exception rec 0x406f1030 frame 0x406f2108 trylevel 1 descr 0x410ab3f8
exception type:
flags 0 destr (nil) handler (nil) type info 0x410dfde0
    0: flags 1 type 0x410e4478 ((nil) .PAVCStBaseServerException@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    1: flags 1 type 0x410e4458 ((nil) .PAVCStException@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    2: flags 1 type 0x410e43e0 ((nil) .PAVCException@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    3: flags 1 type 0x410e4440 ((nil) .PAVCObject@@) offset 0 vbase -1,0 size 4 copy ctor (nil)
    4: flags 1 type 0x410e4430 ((nil) .PAX) offset 0 vbase -1,0 size 4 copy ctor (nil)
function descr:
magic 19930520
unwind table: 0x410ab418 7
    0: prev -1 func (nil)
    1: prev 0 func (nil)
    2: prev 1 func 0x410a5abd
    3: prev 2 func 0x410a5ac6
    4: prev 3 func 0x410a5acf
    5: prev 0 func (nil)
    6: prev -1 func (nil)
try table: 0x410ab450 2
    0: start 1 end 4 catchlevel 5 catch 0x410ab478 2
        0: flags 0 offset -80 handler 0x41082e43 type 0x410b5070 ((nil) .PAVCException@@)
        1: flags 0 offset 0 handler 0x41082e6d type (nil)
    1: start 0 end 5 catchlevel 6 catch 0x410ab498 2
        0: flags 0 offset -84 handler 0x41082e9c type 0x410b5070 ((nil) .PAVCException@@)
        1: flags 0 offset 0 handler 0x41082eb9 type (nil)
trace:seh:call_catch_block matched type 0x410dfd80 in tryblock 0 catchblock 0
<=============

Allright, I'm kind of lost now, but we've obviously found our way back into
normal_handler once more, and this time call_catch_block is going to take some
action, calling back into Starteam once more; first it does the RtlUnwind ritual:

============>
0807bf40:Call ntdll.RtlUnwind(406f2108,00000000,406f1030,00000000) ret=40f15d99
trace:seh:EXC_RtlUnwind code=e06d7363 flags=3
trace:seh:EXC_CallHandler calling handler at 0x4010c310 code=e06d7363 flags=3
trace:seh:EXC_CallHandler handler returned 1
trace:seh:EXC_CallHandler calling handler at 0x410de4e6 code=e06d7363 flags=3
0807bf40:Call msvcrt.__CxxFrameHandler(406f1030,406f12c8,406f0210,406f0144) ret=4010c420 fs=008f
 eax=410dfce8 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f12d0 edi=406f020c
 ebp=406f010c esp=406f00c8 ds=002b es=002b gs=0000 flags=00000202
0807bf40:Ret  msvcrt.__CxxFrameHandler() retval=00000001 ret=4010c420 fs=008f
 eax=00000001 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f12d0 edi=406f020c
 ebp=406f010c esp=406f00c8 ds=002b es=002b gs=0000 flags=00000202
trace:seh:EXC_CallHandler handler returned 1
trace:seh:EXC_CallHandler calling handler at 0x410de4b4 code=e06d7363 flags=3
0807bf40:Call msvcrt.__CxxFrameHandler(406f1030,406f1fc8,406f0210,406f0144) ret=4010c420 fs=008f
 eax=410dfc20 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f1fd0 edi=406f020c
 ebp=406f010c esp=406f00c8 ds=002b es=002b gs=0000 flags=00000202
0807bf40:Ret  msvcrt.__CxxFrameHandler() retval=00000001 ret=4010c420 fs=008f
 eax=00000001 ebx=40149d30 ecx=401614a8 edx=00000034 esi=406f1fd0 edi=406f020c
 ebp=406f010c esp=406f00c8 ds=002b es=002b gs=0000 flags=00000202
trace:seh:EXC_CallHandler handler returned 1
0807bf40:Ret  ntdll.RtlUnwind() retval=00000000 ret=40f15d99
<=============

Allright, here it goes.

==============>
trace:seh:call_catch_block calling catch block 0x410ab478 for type 0x410dfd80 addr 0x41082e43 ebp 0x406f2114
0807bf40:Call ntdll.RtlLeaveCriticalSection(42a00434) ret=41085594
0807bf40:Ret  ntdll.RtlLeaveCriticalSection() retval=00000000 ret=41085594
0807bf40:Call msvcrt.clock() ret=40f3e262
0807bf40:Ret  msvcrt.clock() retval=0000d354 ret=40f3e262
0807bf40:Call ntdll._ftol() ret=40f3e279
0807bf40:Ret  ntdll._ftol() retval=0000d354 ret=40f3e279
0807bf40:Call kernel32.lstrcpynA(406ee63c,42a90310 "Event Handler not found",00002000) ret=4104386c
0807bf40:Ret  kernel32.lstrcpynA() retval=406ee63c ret=4104386c
0807bf40:Call kernel32.lstrlenA(406ee63c "Event Handler not found") ret=5f4038e2
0807bf40:Ret  kernel32.lstrlenA() retval=00000017 ret=5f4038e2
0807bf40:Call ntdll.RtlEnterCriticalSection(5f4d0088) ret=5f4020bd
0807bf40:Ret  ntdll.RtlEnterCriticalSection() retval=00000000 ret=5f4020bd
0807bf40:Call ntdll.RtlLeaveCriticalSection(5f4d0088) ret=5f402103
0807bf40:Ret  ntdll.RtlLeaveCriticalSection() retval=00000000 ret=5f402103
0807bf40:Call msvcrt.memcpy(42a90360,406ee63c,00000017) ret=5f403910
0807bf40:Ret  msvcrt.memcpy() retval=42a90360 ret=5f403910
0807bf40:Call msvcrt._CxxThrowException(00000000,00000000) ret=41082e6d
<==============

StarTeam wants to re-raise again.  So now, if I understand correctly, they're
going to nest another Raise within the already nested Raise.  That's it for Starteam.


More information about the wine-devel mailing list