Jacek Caban : kernel32: Reimplement DebugBreakProcess on top of DbgUiIssueRemoteBreakin.
Alexandre Julliard
julliard at winehq.org
Fri Jul 5 14:49:18 CDT 2019
Module: wine
Branch: master
Commit: a679f965c8154c46338bbef9a3a0ab3ec7e785a4
URL: https://source.winehq.org/git/wine.git/?a=commit;h=a679f965c8154c46338bbef9a3a0ab3ec7e785a4
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Jul 5 13:21:37 2019 +0200
kernel32: Reimplement DebugBreakProcess on top of DbgUiIssueRemoteBreakin.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/debugger.c | 18 ++++++------------
dlls/kernel32/tests/debugger.c | 3 +--
include/wine/server_protocol.h | 19 +------------------
server/debugger.c | 14 --------------
server/protocol.def | 8 --------
server/request.h | 6 ------
server/trace.c | 13 -------------
7 files changed, 8 insertions(+), 73 deletions(-)
diff --git a/dlls/kernel32/debugger.c b/dlls/kernel32/debugger.c
index e2ee1fd..d439475 100644
--- a/dlls/kernel32/debugger.c
+++ b/dlls/kernel32/debugger.c
@@ -407,21 +407,15 @@ void WINAPI DebugBreak(void)
*
* True if successful.
*/
-BOOL WINAPI DebugBreakProcess(HANDLE hProc)
+BOOL WINAPI DebugBreakProcess(HANDLE process)
{
- BOOL ret, self;
+ NTSTATUS status;
- TRACE("(%p)\n", hProc);
+ TRACE("(%p)\n", process);
- SERVER_START_REQ( debug_break )
- {
- req->handle = wine_server_obj_handle( hProc );
- ret = !wine_server_call_err( req );
- self = ret && reply->self;
- }
- SERVER_END_REQ;
- if (self) DbgBreakPoint();
- return ret;
+ status = DbgUiIssueRemoteBreakin(process);
+ if (status) SetLastError(RtlNtStatusToDosError(status));
+ return !status;
}
diff --git a/dlls/kernel32/tests/debugger.c b/dlls/kernel32/tests/debugger.c
index 3f73f2e..691e1c0 100644
--- a/dlls/kernel32/tests/debugger.c
+++ b/dlls/kernel32/tests/debugger.c
@@ -988,7 +988,6 @@ static void test_debug_children(char *name, DWORD flag, BOOL debug_child)
/* a new thread, which executes DbgDebugBreak, is created */
next_event(&ctx, 2000);
- todo_wine
ok(ctx.ev.dwDebugEventCode == CREATE_THREAD_DEBUG_EVENT, "dwDebugEventCode = %d\n", ctx.ev.dwDebugEventCode);
last_thread = ctx.ev.dwThreadId;
@@ -999,7 +998,7 @@ static void test_debug_children(char *name, DWORD flag, BOOL debug_child)
ok(ctx.ev.dwThreadId == last_thread, "unexpected thread\n");
ok(ctx.ev.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT, "ExceptionCode = %x\n",
ctx.ev.u.Exception.ExceptionRecord.ExceptionCode);
- todo_wine
+ todo_wine_if(sizeof(void*) == 4)
ok(ctx.ev.u.Exception.ExceptionRecord.ExceptionAddress == pDbgBreakPoint, "ExceptionAddres != DbgBreakPoint\n");
ret = SetEvent(event_attach);
diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h
index f67b09a..d26f27c 100644
--- a/include/wine/server_protocol.h
+++ b/include/wine/server_protocol.h
@@ -2552,20 +2552,6 @@ struct debug_process_reply
-struct debug_break_request
-{
- struct request_header __header;
- obj_handle_t handle;
-};
-struct debug_break_reply
-{
- struct reply_header __header;
- int self;
- char __pad_12[4];
-};
-
-
-
struct set_debugger_kill_on_exit_request
{
struct request_header __header;
@@ -5901,7 +5887,6 @@ enum request
REQ_get_exception_status,
REQ_continue_debug_event,
REQ_debug_process,
- REQ_debug_break,
REQ_set_debugger_kill_on_exit,
REQ_read_process_memory,
REQ_write_process_memory,
@@ -6206,7 +6191,6 @@ union generic_request
struct get_exception_status_request get_exception_status_request;
struct continue_debug_event_request continue_debug_event_request;
struct debug_process_request debug_process_request;
- struct debug_break_request debug_break_request;
struct set_debugger_kill_on_exit_request set_debugger_kill_on_exit_request;
struct read_process_memory_request read_process_memory_request;
struct write_process_memory_request write_process_memory_request;
@@ -6509,7 +6493,6 @@ union generic_reply
struct get_exception_status_reply get_exception_status_reply;
struct continue_debug_event_reply continue_debug_event_reply;
struct debug_process_reply debug_process_reply;
- struct debug_break_reply debug_break_reply;
struct set_debugger_kill_on_exit_reply set_debugger_kill_on_exit_reply;
struct read_process_memory_reply read_process_memory_reply;
struct write_process_memory_reply write_process_memory_reply;
@@ -6708,6 +6691,6 @@ union generic_reply
struct resume_process_reply resume_process_reply;
};
-#define SERVER_PROTOCOL_VERSION 586
+#define SERVER_PROTOCOL_VERSION 587
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */
diff --git a/server/debugger.c b/server/debugger.c
index 38fe788..7c64cbb 100644
--- a/server/debugger.c
+++ b/server/debugger.c
@@ -714,20 +714,6 @@ DECL_HANDLER(get_exception_status)
}
}
-/* simulate a breakpoint in a process */
-DECL_HANDLER(debug_break)
-{
- struct process *process;
-
- reply->self = 0;
- if ((process = get_process_from_handle( req->handle, PROCESS_SET_INFORMATION /*FIXME*/ )))
- {
- if (process != current->process) break_process( process );
- else reply->self = 1;
- release_object( process );
- }
-}
-
/* set debugger kill on exit flag */
DECL_HANDLER(set_debugger_kill_on_exit)
{
diff --git a/server/protocol.def b/server/protocol.def
index 58a7545..b80a6d6 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -1940,14 +1940,6 @@ enum char_info_mode
@END
-/* Simulate a breakpoint in a process */
- at REQ(debug_break)
- obj_handle_t handle; /* process handle */
- at REPLY
- int self; /* was it the caller itself? */
- at END
-
-
/* Set debugger kill on exit flag */
@REQ(set_debugger_kill_on_exit)
int kill_on_exit; /* 0=detach/1=kill debuggee when debugger dies */
diff --git a/server/request.h b/server/request.h
index 1858b41..57f8937 100644
--- a/server/request.h
+++ b/server/request.h
@@ -213,7 +213,6 @@ DECL_HANDLER(queue_exception_event);
DECL_HANDLER(get_exception_status);
DECL_HANDLER(continue_debug_event);
DECL_HANDLER(debug_process);
-DECL_HANDLER(debug_break);
DECL_HANDLER(set_debugger_kill_on_exit);
DECL_HANDLER(read_process_memory);
DECL_HANDLER(write_process_memory);
@@ -517,7 +516,6 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] =
(req_handler)req_get_exception_status,
(req_handler)req_continue_debug_event,
(req_handler)req_debug_process,
- (req_handler)req_debug_break,
(req_handler)req_set_debugger_kill_on_exit,
(req_handler)req_read_process_memory,
(req_handler)req_write_process_memory,
@@ -1376,10 +1374,6 @@ C_ASSERT( sizeof(struct continue_debug_event_request) == 24 );
C_ASSERT( FIELD_OFFSET(struct debug_process_request, pid) == 12 );
C_ASSERT( FIELD_OFFSET(struct debug_process_request, attach) == 16 );
C_ASSERT( sizeof(struct debug_process_request) == 24 );
-C_ASSERT( FIELD_OFFSET(struct debug_break_request, handle) == 12 );
-C_ASSERT( sizeof(struct debug_break_request) == 16 );
-C_ASSERT( FIELD_OFFSET(struct debug_break_reply, self) == 8 );
-C_ASSERT( sizeof(struct debug_break_reply) == 16 );
C_ASSERT( FIELD_OFFSET(struct set_debugger_kill_on_exit_request, kill_on_exit) == 12 );
C_ASSERT( sizeof(struct set_debugger_kill_on_exit_request) == 16 );
C_ASSERT( FIELD_OFFSET(struct read_process_memory_request, handle) == 12 );
diff --git a/server/trace.c b/server/trace.c
index d4a35e4..af87a5d 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -2447,16 +2447,6 @@ static void dump_debug_process_request( const struct debug_process_request *req
fprintf( stderr, ", attach=%d", req->attach );
}
-static void dump_debug_break_request( const struct debug_break_request *req )
-{
- fprintf( stderr, " handle=%04x", req->handle );
-}
-
-static void dump_debug_break_reply( const struct debug_break_reply *req )
-{
- fprintf( stderr, " self=%d", req->self );
-}
-
static void dump_set_debugger_kill_on_exit_request( const struct set_debugger_kill_on_exit_request *req )
{
fprintf( stderr, " kill_on_exit=%d", req->kill_on_exit );
@@ -4708,7 +4698,6 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
(dump_func)dump_get_exception_status_request,
(dump_func)dump_continue_debug_event_request,
(dump_func)dump_debug_process_request,
- (dump_func)dump_debug_break_request,
(dump_func)dump_set_debugger_kill_on_exit_request,
(dump_func)dump_read_process_memory_request,
(dump_func)dump_write_process_memory_request,
@@ -5009,7 +4998,6 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
(dump_func)dump_get_exception_status_reply,
NULL,
NULL,
- (dump_func)dump_debug_break_reply,
NULL,
(dump_func)dump_read_process_memory_reply,
NULL,
@@ -5310,7 +5298,6 @@ static const char * const req_names[REQ_NB_REQUESTS] = {
"get_exception_status",
"continue_debug_event",
"debug_process",
- "debug_break",
"set_debugger_kill_on_exit",
"read_process_memory",
"write_process_memory",
More information about the wine-cvs
mailing list