diff --git a/src/apps/debugger/debugger_interface/DebuggerInterface.cpp b/src/apps/debugger/debugger_interface/DebuggerInterface.cpp index 7a7b6689d8..4a0b8cd635 100644 --- a/src/apps/debugger/debugger_interface/DebuggerInterface.cpp +++ b/src/apps/debugger/debugger_interface/DebuggerInterface.cpp @@ -363,6 +363,35 @@ DebuggerInterface::SingleStepThread(thread_id thread) } +status_t +DebuggerInterface::InstallBreakpoint(target_addr_t address) +{ + DebugContextGetter contextGetter(fDebugContextPool); + + debug_nub_set_breakpoint message; + message.reply_port = contextGetter.Context()->reply_port; + message.address = (void*)(addr_t)address; + + debug_nub_set_breakpoint_reply reply; + + status_t error = send_debug_message(contextGetter.Context(), + B_DEBUG_MESSAGE_SET_BREAKPOINT, &message, sizeof(message), &reply, + sizeof(reply)); + return error == B_OK ? reply.error : error; +} + + +status_t +DebuggerInterface::UninstallBreakpoint(target_addr_t address) +{ + debug_nub_clear_breakpoint message; + message.address = (void*)(addr_t)address; + + return write_port(fNubPort, B_DEBUG_MESSAGE_CLEAR_BREAKPOINT, + &message, sizeof(message)); +} + + status_t DebuggerInterface::GetThreadInfos(BObjectList& infos) { diff --git a/src/apps/debugger/debugger_interface/DebuggerInterface.h b/src/apps/debugger/debugger_interface/DebuggerInterface.h index ab0e1bc978..c5f65d6268 100644 --- a/src/apps/debugger/debugger_interface/DebuggerInterface.h +++ b/src/apps/debugger/debugger_interface/DebuggerInterface.h @@ -40,6 +40,9 @@ public: virtual status_t StopThread(thread_id thread); virtual status_t SingleStepThread(thread_id thread); + virtual status_t InstallBreakpoint(target_addr_t address); + virtual status_t UninstallBreakpoint(target_addr_t address); + virtual status_t GetThreadInfos(BObjectList& infos); virtual status_t GetImageInfos(BObjectList& infos); virtual status_t GetSymbolInfos(team_id team, image_id image,