================ @@ -492,23 +492,40 @@ NativeProcessWindows::OnDebugException(bool first_chance, } case DWORD(STATUS_BREAKPOINT): case STATUS_WX86_BREAKPOINT: - if (FindSoftwareBreakpoint(record.GetExceptionAddress())) { - LLDB_LOG(log, "Hit non-loader breakpoint at address {0:x}.", - record.GetExceptionAddress()); - StopThread(record.GetThreadID(), StopReason::eStopReasonBreakpoint); + if (NativeThreadWindows *stop_thread = + GetThreadByID(record.GetThreadID())) { + auto ®_ctx = stop_thread->GetRegisterContext(); + const auto exception_addr = record.GetExceptionAddress(); + const auto thread_id = record.GetThreadID(); - if (NativeThreadWindows *stop_thread = - GetThreadByID(record.GetThreadID())) { - auto ®ister_context = stop_thread->GetRegisterContext(); - uint32_t breakpoint_size = GetSoftwareBreakpointPCOffset(); + if (FindSoftwareBreakpoint(exception_addr)) { + LLDB_LOG(log, "Hit non-loader breakpoint at address {0:x}.", + exception_addr); // The current PC is AFTER the BP opcode, on all architectures. - uint64_t pc = register_context.GetPC() - breakpoint_size; - register_context.SetPC(pc); + reg_ctx.SetPC(reg_ctx.GetPC() - GetSoftwareBreakpointPCOffset()); + StopThread(thread_id, StopReason::eStopReasonBreakpoint); + SetState(eStateStopped, true); + return ExceptionResult::MaskException; + } else { + const std::vector<ULONG_PTR> &args = record.GetExceptionArguments(); + // Check that the ExceptionInformation array of EXCEPTION_RECORD + // contains at least two elements: the first is a read-write flag + // indicating the type of data access operation (read or write) while + // the second contains the virtual address of the accessed data. + if (args.size() >= 2) { + uint32_t hw_id = LLDB_INVALID_INDEX32; + reg_ctx.GetWatchpointHitIndex(hw_id, args[1]); ---------------- DavidSpickett wrote:
Ideally every error path returns LLDB_INVALID_INDEX32 but you should check that the returned Status is not a failure as well, just in case. https://github.com/llvm/llvm-project/pull/108072 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits