diff options
Diffstat (limited to 'Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp')
| -rw-r--r-- | Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp b/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp index fcf57c8acf..1775d180fa 100644 --- a/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp @@ -817,29 +817,36 @@ void MemoryViewWidget::ToggleBreakpoint(u32 addr, bool row) if (row && memchecks.OverlapsMemcheck(addr, m_bytes_per_row)) overlap = true; - for (int i = 0; i < breaks; i++) { - u32 address = addr + length * i; - TMemCheck* check_ptr = memchecks.GetMemCheck(address, length); + const Core::CPUThreadGuard guard(m_system); - if (check_ptr == nullptr && !overlap) - { - TMemCheck check; - check.start_address = address; - check.end_address = check.start_address + length - 1; - check.is_ranged = length > 0; - check.is_break_on_read = (m_bp_type == BPType::ReadOnly || m_bp_type == BPType::ReadWrite); - check.is_break_on_write = (m_bp_type == BPType::WriteOnly || m_bp_type == BPType::ReadWrite); - check.log_on_hit = m_do_log; - check.break_on_hit = true; - - memchecks.Add(std::move(check)); - } - else if (check_ptr != nullptr) + for (int i = 0; i < breaks; i++) { - // Using the pointer fixes misaligned breakpoints (0x11 breakpoint in 0x10 aligned view). - memchecks.Remove(check_ptr->start_address); + u32 address = addr + length * i; + TMemCheck* check_ptr = memchecks.GetMemCheck(address, length); + + if (check_ptr == nullptr && !overlap) + { + TMemCheck check; + check.start_address = address; + check.end_address = check.start_address + length - 1; + check.is_ranged = length > 0; + check.is_break_on_read = (m_bp_type == BPType::ReadOnly || m_bp_type == BPType::ReadWrite); + check.is_break_on_write = + (m_bp_type == BPType::WriteOnly || m_bp_type == BPType::ReadWrite); + check.log_on_hit = m_do_log; + check.break_on_hit = true; + + memchecks.Add(std::move(check), false); + } + else if (check_ptr != nullptr) + { + // Using the pointer fixes misaligned breakpoints (0x11 breakpoint in 0x10 aligned view). + memchecks.Remove(check_ptr->start_address, false); + } } + + memchecks.Update(); } emit Host::GetInstance()->PPCBreakpointsChanged(); |
