diff --git a/Core/Debugger/Breakpoints.cpp b/Core/Debugger/Breakpoints.cpp index c247f17274..b44c064df7 100644 --- a/Core/Debugger/Breakpoints.cpp +++ b/Core/Debugger/Breakpoints.cpp @@ -53,7 +53,7 @@ size_t CBreakPoints::FindBreakpoint(u32 addr, bool matchTemp, bool temp) { for (size_t i = 0; i < breakPoints_.size(); ++i) { - if (breakPoints_[i].iAddress == addr && (!matchTemp || breakPoints_[i].bTemporary == temp)) + if (breakPoints_[i].addr == addr && (!matchTemp || breakPoints_[i].temporary == temp)) return i; } @@ -74,7 +74,7 @@ size_t CBreakPoints::FindMemCheck(u32 start, u32 end) bool CBreakPoints::IsAddressBreakPoint(u32 addr) { size_t bp = FindBreakpoint(addr); - return bp != INVALID_BREAKPOINT && breakPoints_[bp].bOn; + return bp != INVALID_BREAKPOINT && breakPoints_[bp].enabled; } bool CBreakPoints::IsTempBreakPoint(u32 addr) @@ -89,16 +89,16 @@ void CBreakPoints::AddBreakPoint(u32 addr, bool temp) if (bp == INVALID_BREAKPOINT) { BreakPoint pt; - pt.bOn = true; - pt.bTemporary = temp; - pt.iAddress = addr; + pt.enabled = true; + pt.temporary = temp; + pt.addr = addr; breakPoints_.push_back(pt); Update(addr); } - else if (!breakPoints_[bp].bOn) + else if (!breakPoints_[bp].enabled) { - breakPoints_[bp].bOn = true; + breakPoints_[bp].enabled = true; Update(addr); } } @@ -124,7 +124,7 @@ void CBreakPoints::ChangeBreakPoint(u32 addr, bool status) size_t bp = FindBreakpoint(addr); if (bp != INVALID_BREAKPOINT) { - breakPoints_[bp].bOn = status; + breakPoints_[bp].enabled = status; Update(addr); } } @@ -146,7 +146,7 @@ void CBreakPoints::ClearTemporaryBreakPoints() bool update = false; for (int i = (int)breakPoints_.size()-1; i >= 0; --i) { - if (breakPoints_[i].bTemporary) + if (breakPoints_[i].temporary) { breakPoints_.erase(breakPoints_.begin() + i); update = true; @@ -260,21 +260,6 @@ MemCheck *CBreakPoints::GetMemCheck(u32 address, int size) return 0; } -int CBreakPoints::GetNumBreakpoints() -{ - return (int)breakPoints_.size(); -} - -const BreakPoint CBreakPoints::GetBreakpoint(size_t i) -{ - return breakPoints_[i]; -} - -int CBreakPoints::GetBreakpointAddress(size_t i) -{ - return breakPoints_[i].iAddress; -} - const std::vector CBreakPoints::GetMemChecks() { return memChecks_; diff --git a/Core/Debugger/Breakpoints.h b/Core/Debugger/Breakpoints.h index 19e7e0a09e..85241c2edc 100644 --- a/Core/Debugger/Breakpoints.h +++ b/Core/Debugger/Breakpoints.h @@ -35,18 +35,18 @@ struct BreakPoint { BreakPoint() : hasCond(false) {} - u32 iAddress; - bool bOn; - bool bTemporary; + u32 addr; + bool enabled; + bool temporary; bool hasCond; BreakPointCond cond; bool operator == (const BreakPoint &other) const { - return iAddress == other.iAddress; + return addr == other.addr; } bool operator < (const BreakPoint &other) const { - return iAddress < other.iAddress; + return addr < other.addr; } }; @@ -113,9 +113,6 @@ public: static void ClearAllMemChecks(); static MemCheck *GetMemCheck(u32 address, int size); - static int GetNumBreakpoints(); - static const BreakPoint GetBreakpoint(size_t i); - static int GetBreakpointAddress(size_t i); // TODO: MemChecks somehow too? static void SetSkipFirst(u32 pc) { breakSkipFirstAt_ = pc; } diff --git a/Windows/Debugger/Debugger_Disasm.cpp b/Windows/Debugger/Debugger_Disasm.cpp index 95cbea73f7..4cb4133177 100644 --- a/Windows/Debugger/Debugger_Disasm.cpp +++ b/Windows/Debugger/Debugger_Disasm.cpp @@ -211,12 +211,12 @@ CDisasm::~CDisasm() { } -int getTotalBreakpointCount() +int CDisasm::getTotalBreakpointCount() { int count = (int)CBreakPoints::GetMemChecks().size(); for (size_t i = 0; i < CBreakPoints::GetBreakpoints().size(); i++) { - if (!CBreakPoints::GetBreakpoint(i).bTemporary) count++; + if (!displayedBreakPoints_[i].temporary) count++; } return count; @@ -224,6 +224,10 @@ int getTotalBreakpointCount() void CDisasm::updateBreakpointList() { + // Update the items we're displaying from the debugger. + displayedBreakPoints_ = CBreakPoints::GetBreakpoints(); + displayedMemChecks_= CBreakPoints::GetMemChecks(); + HWND breakpointHwnd = GetDlgItem(m_hDlg, IDC_BREAKPOINTLIST); int breakpointCount = getTotalBreakpointCount(); int items = ListView_GetItemCount(breakpointHwnd); @@ -252,21 +256,21 @@ void CDisasm::updateBreakpointList() UpdateWindow(breakpointHwnd); } -int getBreakpointIndex(int itemIndex, bool& isMemory) +int CDisasm::getBreakpointIndex(int itemIndex, bool& isMemory) { // memory breakpoints first - if (itemIndex < CBreakPoints::GetMemChecks().size()) + if (itemIndex < (int)displayedMemChecks_.size()) { isMemory = true; return itemIndex; } - itemIndex -= (int)CBreakPoints::GetMemChecks().size(); + itemIndex -= (int)displayedMemChecks_.size(); - int i = 0; - while (i < CBreakPoints::GetNumBreakpoints()) + size_t i = 0; + while (i < displayedBreakPoints_.size()) { - if (CBreakPoints::GetBreakpoint(i).bTemporary) + if (displayedBreakPoints_[i].temporary) { i++; continue; @@ -276,7 +280,7 @@ int getBreakpointIndex(int itemIndex, bool& isMemory) if (itemIndex == 0) { isMemory = false; - return i; + return (int)i; } i++; @@ -294,10 +298,10 @@ void CDisasm::removeBreakpoint(int itemIndex) if (isMemory) { - auto memchecks = CBreakPoints::GetMemChecks(); - CBreakPoints::RemoveMemCheck(memchecks[index].start, memchecks[index].end); + auto mc = displayedMemChecks_[index]; + CBreakPoints::RemoveMemCheck(mc.start, mc.end); } else { - u32 address = CBreakPoints::GetBreakpointAddress(index); + u32 address = displayedBreakPoints_[index].addr; CBreakPoints::RemoveBreakPoint(address); } } @@ -310,14 +314,13 @@ void CDisasm::gotoBreakpointAddress(int itemIndex) if (isMemory) { - auto memchecks = CBreakPoints::GetMemChecks(); - u32 address = memchecks[index].start; + u32 address = displayedMemChecks_[index].start; for (int i=0; iGoto(address); } else { - u32 address = CBreakPoints::GetBreakpointAddress(index); + u32 address = displayedBreakPoints_[index].addr; Goto(address); SetFocus(GetDlgItem(m_hDlg, IDC_DISASMVIEW)); } @@ -337,7 +340,6 @@ void CDisasm::handleBreakpointNotify(LPARAM lParam) if (((LPNMHDR)lParam)->code == LVN_GETDISPINFO) { NMLVDISPINFO* dispInfo = (NMLVDISPINFO*)lParam; - auto mem = CBreakPoints::GetMemChecks(); bool isMemory; int index = getBreakpointIndex(dispInfo->item.iItem,isMemory); @@ -350,7 +352,7 @@ void CDisasm::handleBreakpointNotify(LPARAM lParam) { if (isMemory) { - switch (mem[index].cond) + switch (displayedMemChecks_[index].cond) { case MEMCHECK_READ: strcpy(breakpointText, "Read"); @@ -371,9 +373,9 @@ void CDisasm::handleBreakpointNotify(LPARAM lParam) { if (isMemory) { - sprintf(breakpointText,"0x%08X",mem[index].start); + sprintf(breakpointText,"0x%08X",displayedMemChecks_[index].start); } else { - sprintf(breakpointText,"0x%08X",CBreakPoints::GetBreakpointAddress(index)); + sprintf(breakpointText,"0x%08X",displayedBreakPoints_[index].addr); } } break; @@ -381,10 +383,11 @@ void CDisasm::handleBreakpointNotify(LPARAM lParam) { if (isMemory) { - if (mem[index].end == 0) sprintf(breakpointText,"0x%08X",1); - else sprintf(breakpointText,"0x%08X",mem[index].end-mem[index].start); + auto mc = displayedMemChecks_[index]; + if (mc.end == 0) sprintf(breakpointText,"0x%08X",1); + else sprintf(breakpointText,"0x%08X",mc.end-mc.start); } else { - const char* sym = cpu->findSymbolForAddress(CBreakPoints::GetBreakpointAddress(index)); + const char* sym = cpu->findSymbolForAddress(displayedBreakPoints_[index].addr); if (sym != NULL) { strcpy(breakpointText,sym); @@ -401,7 +404,7 @@ void CDisasm::handleBreakpointNotify(LPARAM lParam) strcpy(breakpointText,"-"); } else { CtrlDisAsmView *ptr = CtrlDisAsmView::getFrom(GetDlgItem(m_hDlg,IDC_DISASMVIEW)); - ptr->getOpcodeText(CBreakPoints::GetBreakpointAddress(index),breakpointText); + ptr->getOpcodeText(displayedBreakPoints_[index].addr,breakpointText); } } break; @@ -409,7 +412,7 @@ void CDisasm::handleBreakpointNotify(LPARAM lParam) { if (isMemory) { - sprintf(breakpointText,"%d",mem[index].numHits); + sprintf(breakpointText,"%d",displayedMemChecks_[index].numHits); } else { strcpy(breakpointText,"-"); } @@ -419,9 +422,9 @@ void CDisasm::handleBreakpointNotify(LPARAM lParam) { if (isMemory) { - strcpy(breakpointText,mem[index].result & MEMCHECK_BREAK ? "True" : "False"); + strcpy(breakpointText,displayedMemChecks_[index].result & MEMCHECK_BREAK ? "True" : "False"); } else { - strcpy(breakpointText,CBreakPoints::GetBreakpoint(index).bOn ? "True" : "False"); + strcpy(breakpointText,displayedBreakPoints_[index].enabled ? "True" : "False"); } } break; diff --git a/Windows/Debugger/Debugger_Disasm.h b/Windows/Debugger/Debugger_Disasm.h index 0fe671cbe2..5646c213a2 100644 --- a/Windows/Debugger/Debugger_Disasm.h +++ b/Windows/Debugger/Debugger_Disasm.h @@ -5,10 +5,12 @@ #include "../W32Util/DialogManager.h" #include "CtrlDisasmView.h" -#include "../../Core/MIPS/MIPSDebugInterface.h" #include "CPURegsInterface.h" -#include "../../Globals.h" -#include "../../Core/CPU.h" +#include "Globals.h" +#include "Core/CPU.h" +#include "Core/MIPS/MIPSDebugInterface.h" +#include "Core/Debugger/Breakpoints.h" +#include #include @@ -27,6 +29,9 @@ private: DebugInterface *cpu; u64 lastTicks; + std::vector displayedBreakPoints_; + std::vector displayedMemChecks_; + BOOL DlgProc(UINT message, WPARAM wParam, LPARAM lParam); void UpdateSize(WORD width, WORD height); void SavePosition(); @@ -34,6 +39,8 @@ private: void handleBreakpointNotify(LPARAM lParam); void gotoBreakpointAddress(int itemIndex); void removeBreakpoint(int itemIndex); + int getTotalBreakpointCount(); + int getBreakpointIndex(int itemIndex, bool& isMemory); public: int index; //helper