Skip to content
Snippets Groups Projects
Commit 1d2ba529 authored by Alexandre Julliard's avatar Alexandre Julliard
Browse files

Added current context to the exception debug event sent to the server.

parent 17cf8101
No related branches found
No related tags found
No related merge requests found
......@@ -122,7 +122,7 @@ static DWORD EXC_CallHandler( EXCEPTION_RECORD *record, EXCEPTION_FRAME *frame,
static void EXC_DefaultHandling( EXCEPTION_RECORD *rec, CONTEXT *context )
{
if ((PROCESS_Current()->flags & PDB32_DEBUGGED) &&
(DEBUG_SendExceptionEvent( rec, FALSE ) == DBG_CONTINUE))
(DEBUG_SendExceptionEvent( rec, FALSE, context ) == DBG_CONTINUE))
return; /* continue execution */
if (debug_hook( rec, context, FALSE ) == DBG_CONTINUE)
......@@ -152,7 +152,7 @@ void WINAPI EXC_RtlRaiseException( EXCEPTION_RECORD *rec, CONTEXT *context )
TRACE( "code=%lx flags=%lx\n", rec->ExceptionCode, rec->ExceptionFlags );
if ((PROCESS_Current()->flags & PDB32_DEBUGGED) &&
(DEBUG_SendExceptionEvent( rec, TRUE ) == DBG_CONTINUE))
(DEBUG_SendExceptionEvent( rec, TRUE, context ) == DBG_CONTINUE))
return; /* continue execution */
if (debug_hook( rec, context, TRUE ) == DBG_CONTINUE)
......
......@@ -166,7 +166,7 @@ extern void PROCESS_FreePDB( PDB *pdb );
extern void PROCESS_WalkProcess( void );
/* scheduler/debugger.c */
extern DWORD DEBUG_SendExceptionEvent( EXCEPTION_RECORD *rec, BOOL first_chance );
extern DWORD DEBUG_SendExceptionEvent( EXCEPTION_RECORD *rec, BOOL first_chance, CONTEXT *ctx );
extern DWORD DEBUG_SendCreateProcessEvent( HFILE file, HMODULE module, void *entry );
extern DWORD DEBUG_SendCreateThreadEvent( void *entry );
extern DWORD DEBUG_SendLoadDLLEvent( HFILE file, HMODULE module, LPSTR *name );
......
......@@ -9,7 +9,7 @@
#include <stdlib.h>
#include <time.h>
#include "windef.h"
#include "winbase.h"
/* Request structures */
......@@ -734,6 +734,7 @@ struct debug_event_exception
int nb_params; /* exceptions parameters */
int params[15];
int first_chance; /* first chance to handle it? */
CONTEXT context; /* thread context */
};
struct debug_event_create_thread
{
......
......@@ -34,19 +34,28 @@ static DWORD DEBUG_SendEvent( int code, void *data, int size )
*
* Send an EXCEPTION_DEBUG_EVENT event to the current process debugger.
*/
DWORD DEBUG_SendExceptionEvent( EXCEPTION_RECORD *rec, BOOL first_chance )
DWORD DEBUG_SendExceptionEvent( EXCEPTION_RECORD *rec, BOOL first_chance, CONTEXT *context )
{
struct debug_event_exception event;
int i;
event.code = rec->ExceptionCode;
event.flags = rec->ExceptionFlags;
event.record = rec->ExceptionRecord;
event.addr = rec->ExceptionAddress;
event.nb_params = rec->NumberParameters;
for (i = 0; i < event.nb_params; i++) event.params[i] = rec->ExceptionInformation[i];
event.first_chance = first_chance;
return DEBUG_SendEvent( EXCEPTION_DEBUG_EVENT, &event, sizeof(event) );
DWORD ret = 0;
struct send_debug_event_request *req = get_req_buffer();
struct debug_event_exception *event = (struct debug_event_exception *)(req + 1);
req->code = EXCEPTION_DEBUG_EVENT;
event->code = rec->ExceptionCode;
event->flags = rec->ExceptionFlags;
event->record = rec->ExceptionRecord;
event->addr = rec->ExceptionAddress;
event->nb_params = rec->NumberParameters;
for (i = 0; i < event->nb_params; i++) event->params[i] = rec->ExceptionInformation[i];
event->first_chance = first_chance;
event->context = *context;
if (!server_call( REQ_SEND_DEBUG_EVENT ))
{
ret = req->status;
*context = event->context;
}
return ret;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment