From b0b03af50dd17ee7bb9358f368d04c326db139e0 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 13 Nov 2022 16:01:13 -0800 Subject: [PATCH] Debugger: Keep flag for any breakpoints. Oops, only had these checks for memchecks before. --- Core/Debugger/Breakpoints.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Core/Debugger/Breakpoints.cpp b/Core/Debugger/Breakpoints.cpp index ad1d37e41d..9ab4bc4901 100644 --- a/Core/Debugger/Breakpoints.cpp +++ b/Core/Debugger/Breakpoints.cpp @@ -31,6 +31,7 @@ #include "Core/MIPS/JitCommon/JitCommon.h" #include "Core/CoreTiming.h" +std::atomic anyBreakPoints_(false); std::atomic anyMemChecks_(false); static std::mutex breakPointsMutex_; @@ -160,6 +161,8 @@ size_t CBreakPoints::FindMemCheck(u32 start, u32 end) bool CBreakPoints::IsAddressBreakPoint(u32 addr) { + if (!anyBreakPoints_) + return false; std::lock_guard guard(breakPointsMutex_); size_t bp = FindBreakpoint(addr); return bp != INVALID_BREAKPOINT && breakPoints_[bp].result != BREAK_ACTION_IGNORE; @@ -167,6 +170,8 @@ bool CBreakPoints::IsAddressBreakPoint(u32 addr) bool CBreakPoints::IsAddressBreakPoint(u32 addr, bool* enabled) { + if (!anyBreakPoints_) + return false; std::lock_guard guard(breakPointsMutex_); size_t bp = FindBreakpoint(addr); if (bp == INVALID_BREAKPOINT) return false; @@ -184,6 +189,8 @@ bool CBreakPoints::IsTempBreakPoint(u32 addr) bool CBreakPoints::RangeContainsBreakPoint(u32 addr, u32 size) { + if (!anyBreakPoints_) + return false; std::lock_guard guard(breakPointsMutex_); const u32 end = addr + size; for (const auto &bp : breakPoints_) @@ -207,6 +214,7 @@ void CBreakPoints::AddBreakPoint(u32 addr, bool temp) pt.addr = addr; breakPoints_.push_back(pt); + anyBreakPoints_ = true; guard.unlock(); Update(addr); } @@ -232,6 +240,7 @@ void CBreakPoints::RemoveBreakPoint(u32 addr) if (bp != INVALID_BREAKPOINT) breakPoints_.erase(breakPoints_.begin() + bp); + anyBreakPoints_ = !breakPoints_.empty(); guard.unlock(); Update(addr); } @@ -267,6 +276,8 @@ void CBreakPoints::ChangeBreakPoint(u32 addr, BreakAction result) void CBreakPoints::ClearAllBreakPoints() { + if (!anyBreakPoints_) + return; std::unique_lock guard(breakPointsMutex_); if (!breakPoints_.empty()) { @@ -278,9 +289,9 @@ void CBreakPoints::ClearAllBreakPoints() void CBreakPoints::ClearTemporaryBreakPoints() { - std::unique_lock guard(breakPointsMutex_); - if (breakPoints_.empty()) + if (!anyBreakPoints_) return; + std::unique_lock guard(breakPointsMutex_); bool update = false; for (int i = (int)breakPoints_.size()-1; i >= 0; --i) @@ -342,6 +353,8 @@ void CBreakPoints::ChangeBreakPointLogFormat(u32 addr, const std::string &fmt) { } BreakAction CBreakPoints::ExecBreakPoint(u32 addr) { + if (!anyBreakPoints_) + return BREAK_ACTION_IGNORE; std::unique_lock guard(breakPointsMutex_); size_t bp = FindBreakpoint(addr, false); if (bp != INVALID_BREAKPOINT) {