summaryrefslogtreecommitdiff
path: root/Source/Core/DebuggerWX/src
diff options
context:
space:
mode:
authorfires.gc <fires.gc@gmail.com>2008-07-17 21:46:34 +0000
committerfires.gc <fires.gc@gmail.com>2008-07-17 21:46:34 +0000
commit343d1ece115879ea2c8d77abbeadaa8ef3e3de77 (patch)
tree58513e74dd60b3076331e6c1f098d6a9a9dc219e /Source/Core/DebuggerWX/src
parent91ccda69efb56fa729c3f4f3209726238f656e29 (diff)
debugger improvments
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@25 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/DebuggerWX/src')
-rw-r--r--Source/Core/DebuggerWX/src/BreakpointView.cpp26
-rw-r--r--Source/Core/DebuggerWX/src/BreakpointWindow.cpp18
-rw-r--r--Source/Core/DebuggerWX/src/BreakpointWindow.h7
-rw-r--r--Source/Core/DebuggerWX/src/CodeWindow.cpp74
-rw-r--r--Source/Core/DebuggerWX/src/CodeWindow.h4
5 files changed, 113 insertions, 16 deletions
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<rBreakPoints.size(); i++)
{
@@ -58,12 +62,11 @@ CBreakPointView::Update()
{
SetItem(Item, 2, Debugger::GetDescription(rBP.iAddress));
}
- else
- {
- char szBuffer[32];
- sprintf(szBuffer, "0x%08x", rBP.iAddress);
- SetItem(Item, 2, szBuffer);
- }
+
+ sprintf(szBuffer, "0x%08x", rBP.iAddress);
+ SetItem(Item, 3, szBuffer);
+
+ SetItemData(Item, rBP.iAddress);
}
}
@@ -71,7 +74,12 @@ CBreakPointView::Update()
Refresh();
}
-void CBreakPointView::DeleteCurrentSelection()
-{
-
+ void CBreakPointView::DeleteCurrentSelection()
+ {
+ int Item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
+ if (Item >= 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: