From 343d1ece115879ea2c8d77abbeadaa8ef3e3de77 Mon Sep 17 00:00:00 2001 From: "fires.gc" Date: Thu, 17 Jul 2008 21:46:34 +0000 Subject: debugger improvments git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@25 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/DebuggerWX/src/BreakpointView.cpp | 26 ++++++--- Source/Core/DebuggerWX/src/BreakpointWindow.cpp | 18 +++++- Source/Core/DebuggerWX/src/BreakpointWindow.h | 7 ++- Source/Core/DebuggerWX/src/CodeWindow.cpp | 74 +++++++++++++++++++++++-- Source/Core/DebuggerWX/src/CodeWindow.h | 4 +- 5 files changed, 113 insertions(+), 16 deletions(-) (limited to 'Source/Core/DebuggerWX/src') diff --git a/Source/Core/DebuggerWX/src/BreakpointView.cpp b/Source/Core/DebuggerWX/src/BreakpointView.cpp index bcb86e2a4a..2c6c79b79a 100644 --- a/Source/Core/DebuggerWX/src/BreakpointView.cpp +++ b/Source/Core/DebuggerWX/src/BreakpointView.cpp @@ -24,6 +24,7 @@ BEGIN_EVENT_TABLE(CBreakPointView, wxListCtrl) + END_EVENT_TABLE() CBreakPointView::CBreakPointView(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, long style) @@ -43,7 +44,10 @@ CBreakPointView::Update() InsertColumn(0, wxT("Active"), wxLIST_FORMAT_LEFT, 50); InsertColumn(1, wxT("Type"), wxLIST_FORMAT_LEFT, 50); InsertColumn(2, wxT("Function"), wxLIST_FORMAT_CENTER, 200); + InsertColumn(3, wxT("Address"), wxLIST_FORMAT_CENTER, 100); + InsertColumn(4, wxT("Flags"), wxLIST_FORMAT_CENTER, 100); + char szBuffer[32]; const CBreakPoints::TBreakPoints& rBreakPoints = CBreakPoints::GetBreakPoints(); for (size_t i=0; i= 0) + { + u32 Address = GetItemData(Item); + CBreakPoints::DeleteElementByAddress(Address); + } } \ No newline at end of file diff --git a/Source/Core/DebuggerWX/src/BreakpointWindow.cpp b/Source/Core/DebuggerWX/src/BreakpointWindow.cpp index fbcf1ad4bd..e752f1bbdb 100644 --- a/Source/Core/DebuggerWX/src/BreakpointWindow.cpp +++ b/Source/Core/DebuggerWX/src/BreakpointWindow.cpp @@ -5,6 +5,7 @@ #include "Debugger.h" #include "BreakPointWindow.h" #include "BreakpointView.h" +#include "CodeWindow.h" #include "wx/mstream.h" @@ -21,6 +22,7 @@ BEGIN_EVENT_TABLE(CBreakPointWindow, wxFrame) EVT_MENU(IDM_DELETE, CBreakPointWindow::OnDelete) EVT_MENU(IDM_ADD_BREAKPOINT, CBreakPointWindow::OnAddBreakPoint) EVT_MENU(IDM_ADD_MEMORYCHECK, CBreakPointWindow::OnAddMemoryCheck) + EVT_LIST_ITEM_ACTIVATED(ID_BPS, CBreakPointWindow::OnActivated) END_EVENT_TABLE() @@ -32,9 +34,10 @@ inline wxBitmap _wxGetBitmapFromMemory(const unsigned char* data, int length) } -CBreakPointWindow::CBreakPointWindow(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& position, const wxSize& size, long style) +CBreakPointWindow::CBreakPointWindow(CCodeWindow* _pCodeWindow, wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& position, const wxSize& size, long style) : wxFrame(parent, id, title, position, size, style) , m_BreakPointListView(NULL) + , m_pCodeWindow(_pCodeWindow) { InitBitmaps(); @@ -157,4 +160,17 @@ CBreakPointWindow::OnAddMemoryCheck(wxCommandEvent& event) } +void +CBreakPointWindow::OnActivated(wxListEvent& event) +{ + long Index = event.GetIndex(); + if (Index >= 0) + { + u32 Address = (u32)m_BreakPointListView->GetItemData(Index); + if (m_pCodeWindow != NULL) + { + m_pCodeWindow->JumpToAddress(Address); + } + } +} diff --git a/Source/Core/DebuggerWX/src/BreakpointWindow.h b/Source/Core/DebuggerWX/src/BreakpointWindow.h index 6b7caf3f1b..43bbe03f37 100644 --- a/Source/Core/DebuggerWX/src/BreakpointWindow.h +++ b/Source/Core/DebuggerWX/src/BreakpointWindow.h @@ -6,6 +6,8 @@ #define __BREAKPOINTWINDOW_h__ class CBreakPointView; +class CCodeWindow; +class wxListEvent; #undef BREAKPOINT_WINDOW_STYLE #define BREAKPOINT_WINDOW_STYLE wxCAPTION | wxSYSTEM_MENU | wxCLOSE_BOX | wxRESIZE_BORDER @@ -19,7 +21,7 @@ class CBreakPointWindow public: - CBreakPointWindow(wxWindow* parent, wxWindowID id = 1, const wxString& title = wxT("Breakpoints"), + CBreakPointWindow(CCodeWindow* _pCodeWindow, wxWindow* parent, wxWindowID id = 1, const wxString& title = wxT("Breakpoints"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(400, 250), long style = BREAKPOINT_WINDOW_STYLE); @@ -48,6 +50,8 @@ class CBreakPointWindow }; CBreakPointView* m_BreakPointListView; + CCodeWindow* m_pCodeWindow; + wxBitmap m_Bitmaps[Bitmaps_max]; void OnClose(wxCloseEvent& event); @@ -60,6 +64,7 @@ class CBreakPointWindow void OnDelete(wxCommandEvent& event); void OnAddBreakPoint(wxCommandEvent& event); void OnAddMemoryCheck(wxCommandEvent& event); + void OnActivated(wxListEvent& event); }; #endif diff --git a/Source/Core/DebuggerWX/src/CodeWindow.cpp b/Source/Core/DebuggerWX/src/CodeWindow.cpp index 269917aad0..319f609691 100644 --- a/Source/Core/DebuggerWX/src/CodeWindow.cpp +++ b/Source/Core/DebuggerWX/src/CodeWindow.cpp @@ -20,6 +20,7 @@ #include "RegisterWindow.h" #include "LogWindow.h" #include "BreakpointWindow.h" +#include "IniFile.h" #include "wx/button.h" #include "wx/textctrl.h" @@ -89,7 +90,7 @@ CCodeWindow::CCodeWindow(const SCoreStartupParameter& _LocalCoreStartupParameter : wxFrame(parent, id, title, pos, size, style) , m_RegisterWindow(NULL) , m_logwindow(NULL) -{ +{ CreateMenu(_LocalCoreStartupParameter); wxBoxSizer* sizerBig = new wxBoxSizer(wxHORIZONTAL); @@ -133,11 +134,70 @@ CCodeWindow::CCodeWindow(const SCoreStartupParameter& _LocalCoreStartupParameter m_RegisterWindow = new CRegisterWindow(this); m_RegisterWindow->Show(true); - m_BreakpointWindow = new CBreakPointWindow(this); + m_BreakpointWindow = new CBreakPointWindow(this, this); m_BreakpointWindow->Show(true); UpdateButtonStates(); + + + int x,y,w,h; + + IniFile file; + file.Load("Debugger.ini"); + + file.Get("Code", "x", &x, GetPosition().x); + file.Get("Code", "y", &y, GetPosition().y); + file.Get("Code", "w", &w, GetSize().GetWidth()); + file.Get("Code", "h", &h, GetSize().GetHeight()); + this->SetSize(x, y, w, h); + + file.Get("BreakPoint", "x", &x, m_BreakpointWindow->GetPosition().x); + file.Get("BreakPoint", "y", &y, m_BreakpointWindow->GetPosition().y); + file.Get("BreakPoint", "w", &w, m_BreakpointWindow->GetSize().GetWidth()); + file.Get("BreakPoint", "h", &h, m_BreakpointWindow->GetSize().GetHeight()); + m_BreakpointWindow->SetSize(x, y, w, h); + + file.Get("LogWindow", "x", &x, m_logwindow->GetPosition().x); + file.Get("LogWindow", "y", &y, m_logwindow->GetPosition().y); + file.Get("LogWindow", "w", &w, m_logwindow->GetSize().GetWidth()); + file.Get("LogWindow", "h", &h, m_logwindow->GetSize().GetHeight()); + m_logwindow->SetSize(x, y, w, h); + + file.Get("RegisterWindow", "x", &x, m_RegisterWindow->GetPosition().x); + file.Get("RegisterWindow", "y", &y, m_RegisterWindow->GetPosition().y); + file.Get("RegisterWindow", "w", &w, m_RegisterWindow->GetSize().GetWidth()); + file.Get("RegisterWindow", "h", &h, m_RegisterWindow->GetSize().GetHeight()); + m_RegisterWindow->SetSize(x, y, w, h); +} + + +CCodeWindow::~CCodeWindow() +{ + IniFile file; + file.Load("Debugger.ini"); + + file.Set("Code", "x", GetPosition().x); + file.Set("Code", "y", GetPosition().y); + file.Set("Code", "w", GetSize().GetWidth()); + file.Set("Code", "h", GetSize().GetHeight()); + + file.Set("BreakPoint", "x", m_BreakpointWindow->GetPosition().x); + file.Set("BreakPoint", "y", m_BreakpointWindow->GetPosition().y); + file.Set("BreakPoint", "w", m_BreakpointWindow->GetSize().GetWidth()); + file.Set("BreakPoint", "h", m_BreakpointWindow->GetSize().GetHeight()); + + file.Set("LogWindow", "x", m_logwindow->GetPosition().x); + file.Set("LogWindow", "y", m_logwindow->GetPosition().y); + file.Set("LogWindow", "w", m_logwindow->GetSize().GetWidth()); + file.Set("LogWindow", "h", m_logwindow->GetSize().GetHeight()); + + file.Set("RegisterWindow", "x", m_RegisterWindow->GetPosition().x); + file.Set("RegisterWindow", "y", m_RegisterWindow->GetPosition().y); + file.Set("RegisterWindow", "w", m_RegisterWindow->GetSize().GetWidth()); + file.Set("RegisterWindow", "h", m_RegisterWindow->GetSize().GetHeight()); + + file.Save("Debugger.ini"); } @@ -190,6 +250,12 @@ bool CCodeWindow::UseDualCore() } +void CCodeWindow::JumpToAddress(u32 _Address) +{ + codeview->Center(_Address); +} + + void CCodeWindow::OnCodeStep(wxCommandEvent& event) { switch (event.GetId()) @@ -437,7 +503,7 @@ void CCodeWindow::OnToggleBreakPointWindow(wxCommandEvent& event) { if (!m_BreakpointWindow) { - m_BreakpointWindow = new CBreakPointWindow(this); + m_BreakpointWindow = new CBreakPointWindow(this, this); } m_BreakpointWindow->Show(true); @@ -485,12 +551,12 @@ void CCodeWindow::OnHostMessage(wxCommandEvent& event) break; case IDM_UPDATEBREAKPOINTS: + Update(); if (m_BreakpointWindow) { m_BreakpointWindow->NotifyUpdate(); } - break; } diff --git a/Source/Core/DebuggerWX/src/CodeWindow.h b/Source/Core/DebuggerWX/src/CodeWindow.h index ff711633ac..95db88ece6 100644 --- a/Source/Core/DebuggerWX/src/CodeWindow.h +++ b/Source/Core/DebuggerWX/src/CodeWindow.h @@ -43,12 +43,14 @@ class CCodeWindow const wxSize& size = wxSize(400, 500), long style = wxDEFAULT_FRAME_STYLE | wxCLIP_CHILDREN | wxNO_FULL_REPAINT_ON_RESIZE); + ~CCodeWindow(); + void Update(); void NotifyMapLoaded(); bool UseInterpreter(); bool UseDualCore(); - + void JumpToAddress(u32 _Address); private: -- cgit v1.2.3