Fixed a crash that would occur if a new watch were added by entering a watch name.

Code style updates.
This commit is contained in:
skidau 2014-10-26 23:23:45 +11:00
parent 7eebbcdca7
commit 4570dd7eeb
9 changed files with 53 additions and 51 deletions

View File

@ -280,7 +280,7 @@ void Watches::Update(int count, u32 em_address)
m_Watches.at(count).iAddress = em_address; m_Watches.at(count).iAddress = em_address;
} }
void Watches::UpdateName(int count, std::string name) void Watches::UpdateName(int count, const std::string name)
{ {
m_Watches.at(count).name = name; m_Watches.at(count).name = name;
} }

View File

@ -125,7 +125,7 @@ public:
void Add(const TWatch& bp); void Add(const TWatch& bp);
void Update(int count, u32 em_address); void Update(int count, u32 em_address);
void UpdateName(int count, std::string name); void UpdateName(int count, const std::string name);
// Remove Breakpoint // Remove Breakpoint
void Remove(u32 _iAddress); void Remove(u32 _iAddress);

View File

@ -867,7 +867,7 @@ void Jit64::EnableBlockLink()
{ {
jo.enableBlocklink = true; jo.enableBlocklink = true;
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bJITNoBlockLinking || if (SConfig::GetInstance().m_LocalCoreStartupParameter.bJITNoBlockLinking ||
SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU) SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU)
{ {
// TODO: support block linking with MMU // TODO: support block linking with MMU
jo.enableBlocklink = false; jo.enableBlocklink = false;

View File

@ -712,7 +712,7 @@ void JitIL::EnableBlockLink()
{ {
jo.enableBlocklink = true; jo.enableBlocklink = true;
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bJITNoBlockLinking || if (SConfig::GetInstance().m_LocalCoreStartupParameter.bJITNoBlockLinking ||
SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU) SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU)
{ {
// TODO: support block linking with MMU // TODO: support block linking with MMU
jo.enableBlocklink = false; jo.enableBlocklink = false;

View File

@ -342,7 +342,7 @@ void CCodeWindow::StepOut()
PowerPC::CoreMode oldMode = PowerPC::GetMode(); PowerPC::CoreMode oldMode = PowerPC::GetMode();
PowerPC::SetMode(PowerPC::MODE_INTERPRETER); PowerPC::SetMode(PowerPC::MODE_INTERPRETER);
UGeckoInstruction inst = Memory::Read_Instruction(PC); UGeckoInstruction inst = Memory::Read_Instruction(PC);
GekkoOPInfo *opinfo = GetOpInfo(inst); GekkoOPInfo* opinfo = GetOpInfo(inst);
while (inst.hex != 0x4e800020 && steps < timeout) // check for blr while (inst.hex != 0x4e800020 && steps < timeout) // check for blr
{ {
if (inst.LK) if (inst.LK)

View File

@ -58,9 +58,17 @@ static void UpdateWatchAddr(int count, u32 value)
PowerPC::watches.Update(count - 1, value); PowerPC::watches.Update(count - 1, value);
} }
static void SetWatchName(int count, std::string value) static void SetWatchName(int count, const std::string value)
{ {
PowerPC::watches.UpdateName(count - 1, value); if ((count - 1) < PowerPC::watches.GetWatches().size())
{
PowerPC::watches.UpdateName(count - 1, value);
}
else
{
PowerPC::watches.Add(0);
PowerPC::watches.UpdateName(PowerPC::watches.GetWatches().size() - 1, value);
}
} }
static void SetWatchValue(int count, u32 value) static void SetWatchValue(int count, u32 value)
@ -97,7 +105,7 @@ static wxString GetValueByRowCol(int row, int col)
{ {
u32 addr = GetWatchAddr(row); u32 addr = GetWatchAddr(row);
if (Memory::IsRAMAddress(addr)) if (Memory::IsRAMAddress(addr))
return Memory::GetString(addr, 32).c_str(); return Memory::GetString(addr, 32).c_str();
else else
return wxEmptyString; return wxEmptyString;
} }
@ -161,9 +169,9 @@ void CWatchTable::UpdateWatch()
} }
} }
wxGridCellAttr *CWatchTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind) wxGridCellAttr* CWatchTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind)
{ {
wxGridCellAttr *attr = new wxGridCellAttr(); wxGridCellAttr* attr = new wxGridCellAttr();
attr->SetBackgroundColour(*wxWHITE); attr->SetBackgroundColour(*wxWHITE);
attr->SetFont(DebuggerFont); attr->SetFont(DebuggerFont);
@ -191,10 +199,8 @@ wxGridCellAttr *CWatchTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKin
else else
{ {
bool red = false; bool red = false;
switch (col) if (col == 1)
{ red = m_CachedWatchHasChanged[row];
case 1: red = m_CachedWatchHasChanged[row]; break;
}
attr->SetTextColour(red ? *wxRED : *wxBLACK); attr->SetTextColour(red ? *wxRED : *wxBLACK);
@ -208,7 +214,7 @@ wxGridCellAttr *CWatchTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKin
return attr; return attr;
} }
CWatchView::CWatchView(wxWindow *parent, wxWindowID id) CWatchView::CWatchView(wxWindow* parent, wxWindowID id)
: wxGrid(parent, id) : wxGrid(parent, id)
{ {
SetTable(new CWatchTable(), false); SetTable(new CWatchTable(), false);
@ -269,11 +275,13 @@ void CWatchView::OnPopupMenu(wxCommandEvent& event)
{ {
case IDM_DELETEWATCH: case IDM_DELETEWATCH:
strNewVal = GetValueByRowCol(m_selectedRow, 1); strNewVal = GetValueByRowCol(m_selectedRow, 1);
TryParse("0x" + WxStrToStr(strNewVal), &m_selectedAddress); if (TryParse("0x" + WxStrToStr(strNewVal), &m_selectedAddress))
PowerPC::watches.Remove(m_selectedAddress); {
if (watch_window) PowerPC::watches.Remove(m_selectedAddress);
watch_window->NotifyUpdate(); if (watch_window)
Refresh(); watch_window->NotifyUpdate();
Refresh();
}
break; break;
case IDM_ADDMEMCHECK: case IDM_ADDMEMCHECK:
MemCheck.StartAddress = m_selectedAddress; MemCheck.StartAddress = m_selectedAddress;

View File

@ -30,8 +30,8 @@ public:
int GetNumberCols() override { return 5; } int GetNumberCols() override { return 5; }
int GetNumberRows() override { return MAX_SPECIALS; } int GetNumberRows() override { return MAX_SPECIALS; }
wxString GetValue(int row, int col) override; wxString GetValue(int row, int col) override;
void SetValue(int row, int col, const wxString &) override; void SetValue(int row, int col, const wxString&) override;
wxGridCellAttr *GetAttr(int, int, wxGridCellAttr::wxAttrKind) override; wxGridCellAttr* GetAttr(int, int, wxGridCellAttr::wxAttrKind) override;
void UpdateWatch(); void UpdateWatch();
private: private:

View File

@ -21,11 +21,11 @@ class CWatchWindow
{ {
public: public:
CWatchWindow(wxWindow* parent, CWatchWindow(wxWindow* parent,
wxWindowID id = wxID_ANY, wxWindowID id = wxID_ANY,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, const wxSize& size = wxDefaultSize,
long style = wxTAB_TRAVERSAL | wxNO_BORDER, long style = wxTAB_TRAVERSAL | wxNO_BORDER,
const wxString& name = _("Watch")); const wxString& name = _("Watch"));
~CWatchWindow(); ~CWatchWindow();
void NotifyUpdate(); void NotifyUpdate();

View File

@ -661,15 +661,12 @@ void CFrame::BootGame(const std::string& filename)
if (!bootfile.empty()) if (!bootfile.empty())
{ {
StartGame(bootfile); StartGame(bootfile);
if (UseDebugger) if (UseDebugger && g_pCodeWindow)
{ {
if (g_pCodeWindow) if (g_pCodeWindow->m_WatchWindow)
{ g_pCodeWindow->m_WatchWindow->LoadAll();
if (g_pCodeWindow->m_WatchWindow) if (g_pCodeWindow->m_BreakpointWindow)
g_pCodeWindow->m_WatchWindow->LoadAll(); g_pCodeWindow->m_BreakpointWindow->LoadAll();
if (g_pCodeWindow->m_BreakpointWindow)
g_pCodeWindow->m_BreakpointWindow->LoadAll();
}
} }
} }
} }
@ -1178,25 +1175,22 @@ void CFrame::DoStop()
} }
} }
if (UseDebugger) if (UseDebugger && g_pCodeWindow)
{ {
if (g_pCodeWindow) if (g_pCodeWindow->m_WatchWindow)
{ {
if (g_pCodeWindow->m_WatchWindow) g_pCodeWindow->m_WatchWindow->SaveAll();
{ PowerPC::watches.Clear();
g_pCodeWindow->m_WatchWindow->SaveAll();
PowerPC::watches.Clear();
}
if (g_pCodeWindow->m_BreakpointWindow)
{
g_pCodeWindow->m_BreakpointWindow->SaveAll();
PowerPC::breakpoints.Clear();
PowerPC::memchecks.Clear();
g_pCodeWindow->m_BreakpointWindow->NotifyUpdate();
}
g_symbolDB.Clear();
Host_NotifyMapLoaded();
} }
if (g_pCodeWindow->m_BreakpointWindow)
{
g_pCodeWindow->m_BreakpointWindow->SaveAll();
PowerPC::breakpoints.Clear();
PowerPC::memchecks.Clear();
g_pCodeWindow->m_BreakpointWindow->NotifyUpdate();
}
g_symbolDB.Clear();
Host_NotifyMapLoaded();
} }
// TODO: Show the author/description dialog here // TODO: Show the author/description dialog here