On Friday 15 July 2005 02:44, Eric Pouech wrote:
Robert Lunnon a écrit :
Well we are getting somewhere
When my test application segfaults the debugger attaches and runs through a number of debug events eventually ariving at a segfault
strace:winedbg:dbg_handle_debug_event 00000008:00000009: loads DLL c: \windows\system\imm32.dll @7f440000 (0<0>) trace:winedbg:dbg_handle_debug_event 00000008:00000009: exception code=80000003
Now I added some instrumentation and find the following happens IE
trace:winedbg:dbg_handle_debug_event Continue on first exception is true trace:winedbg:dbg_handle_debug_event Breaking switch trace:winedbg:dbg_handle_debug_event Call ContinueDebugEvent trace:winedbg:dbg_handle_debug_event Continuing executio trace:winedbg:dbg_main_loop Wait for next debug event...
In this code at the top of dbg_main_loop if (dbg_curr_process) dbg_printf("WineDbg starting on pid 0x%lx\n", dbg_curr_pid);
/* wait for first exception */ while (WaitForDebugEvent(&de, INFINITE)) { WINE_TRACE("Calling handle_debug_event 2\n"); if (dbg_handle_debug_event(&de)) {WINE_TRACE("Event
handled\n");break;} WINE_TRACE("Wait for next debug event...\n"); }
Problem is that the client program is stopped, probably on a segfault trace because I enable tracing (stops) on all machine faults and signals when I attached it (this allows my replacement for wait4 to find out if a fault or signal happened in the debuggee). Everything deadlocks then since the debugger never continues the program after the exception (Or perhaps the wineserver never gets a message to restart it)
Perhaps I don't understand the semantics of PTRACE wait4 interactions. Should I just let the app trap machine faults ?
a couple of questions:
- when you call ContinueDebugEvent, did you change the causes that caused
the crash (from the debugger) ? If not, it should segfault again (but I don't know what happens)
Nothing, the client doesn't get restarted it is in state "stop" when I look at the process with ps
- after you called ContinueDebugEvent, the debuggee should be restarted. It
isn't the case, so I'd start looking at ContinueDebugEvent in the server so see what fails (you may want to start with breakpoints instead of seg faults, as it may be easier to handle - except for some kludges -> see winedbg/break.c, when incrementing / decrementing EIP)
OK, this seams a good place to look
Sorry about the continual questions... I'm well out of my comfort zone on this project.
Bob
HTH