mirror of https://github.com/PCSX2/pcsx2.git
pcsx2 debugger: be more friendly with linux
* Fix a couple of gcc warning and replace deprecated function * Fix the redraw of the memory zone * Avoid a crash if we breakpoint before running * Use %s on linux because %S isn't supported * Properly check .result in recMemCheck. Add some code to print hit breakpoint. * breakpoint window isn't properly resized so used a static size as a temporary workaround
This commit is contained in:
parent
e59b252cc0
commit
0980591fa2
|
@ -6,6 +6,7 @@
|
|||
#include "AppCoreThread.h"
|
||||
#include "Debug.h"
|
||||
#include "../VU.h"
|
||||
#include "Counters.h"
|
||||
|
||||
#include "../R3000A.h"
|
||||
#include "../IopMem.h"
|
||||
|
@ -149,7 +150,7 @@ private:
|
|||
|
||||
bool DebugInterface::isAlive()
|
||||
{
|
||||
return GetCoreThread().IsOpen();
|
||||
return GetCoreThread().IsOpen() && g_FrameCount > 0;
|
||||
}
|
||||
|
||||
bool DebugInterface::isCpuPaused()
|
||||
|
|
|
@ -291,7 +291,7 @@ void CtrlDisassemblyView::drawBranchLine(wxDC& dc, std::map<u32,int>& addressPos
|
|||
|
||||
int getBackgroundColor(unsigned int address)
|
||||
{
|
||||
int colors[6] = {0xFFe0FFFF,0xFFFFe0e0,0xFFe8e8FF,0xFFFFe0FF,0xFFe0FFe0,0xFFFFFFe0};
|
||||
u32 colors[6] = {0xFFe0FFFF,0xFFFFe0e0,0xFFe8e8FF,0xFFFFe0FF,0xFFe0FFe0,0xFFFFFFe0};
|
||||
int n=symbolMap.GetFunctionNum(address);
|
||||
if (n==-1) return 0xFFFFFFFF;
|
||||
return colors[n%6];
|
||||
|
|
|
@ -108,6 +108,14 @@ void CtrlMemView::render(wxDC& dc)
|
|||
bool hasFocus = wxWindow::FindFocus() == this;
|
||||
int visibleRows = GetClientSize().y/rowHeight;
|
||||
|
||||
wxColor white = wxColor(0xFFFFFFFF);
|
||||
dc.SetBrush(wxBrush(white));
|
||||
dc.SetPen(wxPen(white));
|
||||
|
||||
int width,height;
|
||||
dc.GetSize(&width,&height);
|
||||
dc.DrawRectangle(0,0,width,height);
|
||||
|
||||
for (int i = 0; i < visibleRows+1; i++)
|
||||
{
|
||||
wchar_t temp[32];
|
||||
|
|
|
@ -53,7 +53,7 @@ CtrlRegisterList::CtrlRegisterList(wxWindow* parent, DebugInterface* _cpu)
|
|||
}
|
||||
|
||||
SetDoubleBuffered(true);
|
||||
SetInitialBestSize(ClientToWindowSize(GetMinClientSize()));
|
||||
SetInitialSize(ClientToWindowSize(GetMinClientSize()));
|
||||
}
|
||||
|
||||
void CtrlRegisterList::postEvent(wxEventType type, wxString text)
|
||||
|
@ -341,19 +341,19 @@ void CtrlRegisterList::onPopupClick(wxCommandEvent& evt)
|
|||
{
|
||||
case ID_REGISTERLIST_DISPLAY32:
|
||||
maxBits = 32;
|
||||
SetBestSize(ClientToWindowSize(GetMinClientSize()));
|
||||
SetInitialSize(ClientToWindowSize(GetMinClientSize()));
|
||||
postEvent(debEVT_UPDATELAYOUT,0);
|
||||
Refresh();
|
||||
break;
|
||||
case ID_REGISTERLIST_DISPLAY64:
|
||||
maxBits = 64;
|
||||
SetBestSize(ClientToWindowSize(GetMinClientSize()));
|
||||
SetInitialSize(ClientToWindowSize(GetMinClientSize()));
|
||||
postEvent(debEVT_UPDATELAYOUT,0);
|
||||
Refresh();
|
||||
break;
|
||||
case ID_REGISTERLIST_DISPLAY128:
|
||||
maxBits = 128;
|
||||
SetBestSize(ClientToWindowSize(GetMinClientSize()));
|
||||
SetInitialSize(ClientToWindowSize(GetMinClientSize()));
|
||||
postEvent(debEVT_UPDATELAYOUT,0);
|
||||
Refresh();
|
||||
break;
|
||||
|
|
|
@ -49,6 +49,11 @@ GenericListViewColumn breakpointColumns[BPL_COLUMNCOUNT] = {
|
|||
BreakpointList::BreakpointList(wxWindow* parent, DebugInterface* _cpu, CtrlDisassemblyView* _disassembly)
|
||||
: wxListView(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxLC_VIRTUAL|wxLC_REPORT|wxLC_SINGLE_SEL|wxNO_BORDER), cpu(_cpu), disasm(_disassembly)
|
||||
{
|
||||
#ifdef __LINUX__
|
||||
// On linux wx failed to resize properly the page. I don't know why so for the moment I just create a static size page
|
||||
// Far from ideal but at least I can use the memory window!
|
||||
this->SetSize(wxSize(1000, 200));
|
||||
#endif
|
||||
insertListViewColumns(this,breakpointColumns,BPL_COLUMNCOUNT);
|
||||
}
|
||||
|
||||
|
@ -130,7 +135,11 @@ wxString BreakpointList::OnGetItemText(long item, long col) const
|
|||
const std::string sym = symbolMap.GetLabelString(displayedBreakPoints_[index].addr);
|
||||
if (!sym.empty())
|
||||
{
|
||||
#ifdef __LINUX__
|
||||
swprintf(dest,256,L"%s",sym.c_str());
|
||||
#else
|
||||
swprintf(dest,256,L"%S",sym.c_str());
|
||||
#endif
|
||||
} else {
|
||||
wcscpy(dest,L"-");
|
||||
}
|
||||
|
@ -144,7 +153,11 @@ wxString BreakpointList::OnGetItemText(long item, long col) const
|
|||
} else {
|
||||
char temp[256];
|
||||
disasm->getOpcodeText(displayedBreakPoints_[index].addr, temp);
|
||||
#ifdef __LINUX__
|
||||
swprintf(dest,256,L"%s",temp);
|
||||
#else
|
||||
swprintf(dest,256,L"%S",temp);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -153,7 +166,11 @@ wxString BreakpointList::OnGetItemText(long item, long col) const
|
|||
if (isMemory || displayedBreakPoints_[index].hasCond == false) {
|
||||
wcscpy(dest,L"-");
|
||||
} else {
|
||||
#ifdef __LINUX__
|
||||
swprintf(dest,256,L"%s",displayedBreakPoints_[index].cond.expressionString);
|
||||
#else
|
||||
swprintf(dest,256,L"%S",displayedBreakPoints_[index].cond.expressionString);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -169,9 +186,17 @@ wxString BreakpointList::OnGetItemText(long item, long col) const
|
|||
case BPL_ENABLED:
|
||||
{
|
||||
if (isMemory) {
|
||||
#ifdef __LINUX__
|
||||
swprintf(dest,256,L"%s",displayedMemChecks_[index].cond & MEMCHECK_BREAK ? "true" : "false");
|
||||
#else
|
||||
swprintf(dest,256,L"%S",displayedMemChecks_[index].cond & MEMCHECK_BREAK ? "true" : "false");
|
||||
#endif
|
||||
} else {
|
||||
#ifdef __LINUX__
|
||||
swprintf(dest,256,L"%s",displayedBreakPoints_[index].enabled ? "true" : "false");
|
||||
#else
|
||||
swprintf(dest,256,L"%S",displayedBreakPoints_[index].enabled ? "true" : "false");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -1295,6 +1295,14 @@ void dynarecMemcheck()
|
|||
recExitExecution();
|
||||
}
|
||||
|
||||
__fastcall void dynarecMemLogcheck(u32 start, bool store)
|
||||
{
|
||||
if (store)
|
||||
DevCon.WriteLn("Hit store breakpoint @0x%x", start);
|
||||
else
|
||||
DevCon.WriteLn("Hit load breakpoint @0x%x", start);
|
||||
}
|
||||
|
||||
void recMemcheck(u32 bits, bool store)
|
||||
{
|
||||
iFlushCall(FLUSH_INTERPRETER);
|
||||
|
@ -1315,7 +1323,7 @@ void recMemcheck(u32 bits, bool store)
|
|||
auto checks = CBreakPoints::GetMemChecks();
|
||||
for (size_t i = 0; i < checks.size(); i++)
|
||||
{
|
||||
if ((checks[i].cond & MEMCHECK_BREAK) == 0)
|
||||
if (checks[i].result == 0)
|
||||
continue;
|
||||
if ((checks[i].cond & MEMCHECK_WRITE) == 0 && store == true)
|
||||
continue;
|
||||
|
@ -1333,7 +1341,13 @@ void recMemcheck(u32 bits, bool store)
|
|||
xForwardJGE8 next2; // if start >= address+size then goto next2
|
||||
|
||||
// hit the breakpoint
|
||||
xCALL(&dynarecMemcheck);
|
||||
if (checks[i].result & MEMCHECK_LOG) {
|
||||
xMOV(edx, store);
|
||||
xCALL(&dynarecMemLogcheck);
|
||||
}
|
||||
if (checks[i].result & MEMCHECK_BREAK) {
|
||||
xCALL(&dynarecMemcheck);
|
||||
}
|
||||
|
||||
next1.SetTarget();
|
||||
next2.SetTarget();
|
||||
|
|
Loading…
Reference in New Issue