mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Various debug ui fixes and enhancements
This commit is contained in:
parent
cbe8245bad
commit
5bb7ac8b7e
7 changed files with 66 additions and 44 deletions
|
@ -264,7 +264,6 @@ void BreakpointWindow::loadFromBreakpoint(BreakPoint& breakpoint)
|
|||
|
||||
enabled = breakpoint.enabled;
|
||||
address = breakpoint.addr;
|
||||
enabled = breakpoint.enabled;
|
||||
size = 1;
|
||||
|
||||
if (breakpoint.hasCond)
|
||||
|
@ -274,3 +273,12 @@ void BreakpointWindow::loadFromBreakpoint(BreakPoint& breakpoint)
|
|||
condition[0] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void BreakpointWindow::initBreakpoint(u32 _address)
|
||||
{
|
||||
memory = false;
|
||||
enabled = true;
|
||||
address = _address;
|
||||
size = 1;
|
||||
condition[0] = 0;
|
||||
}
|
|
@ -43,5 +43,5 @@ public:
|
|||
void addBreakpoint();
|
||||
void loadFromMemcheck(MemCheck& memcheck);
|
||||
void loadFromBreakpoint(BreakPoint& memcheck);
|
||||
|
||||
void initBreakpoint(u32 address);
|
||||
};
|
|
@ -13,6 +13,7 @@
|
|||
#include "Windows/Debugger/CtrlDisAsmView.h"
|
||||
#include "Windows/Debugger/Debugger_MemoryDlg.h"
|
||||
#include "Windows/Debugger/DebuggerShared.h"
|
||||
#include "Windows/Debugger/BreakpointWindow.h"
|
||||
#include "Core/Debugger/SymbolMap.h"
|
||||
#include "Globals.h"
|
||||
#include "Windows/main.h"
|
||||
|
@ -277,7 +278,6 @@ LRESULT CALLBACK CtrlDisAsmView::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPA
|
|||
ccp->redraw();
|
||||
break;
|
||||
case WM_KILLFOCUS:
|
||||
ccp->controlHeld = false;
|
||||
ccp->hasFocus=false;
|
||||
ccp->redraw();
|
||||
break;
|
||||
|
@ -327,7 +327,6 @@ CtrlDisAsmView::CtrlDisAsmView(HWND _wnd)
|
|||
instructionSize=4;
|
||||
showHex=false;
|
||||
hasFocus = false;
|
||||
controlHeld = false;
|
||||
dontRedraw = false;
|
||||
keyTaken = false;
|
||||
|
||||
|
@ -646,6 +645,7 @@ void CtrlDisAsmView::onPaint(WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
if (enabled) textColor = 0x0000FF;
|
||||
int yOffset = max(-1,(rowHeight-14+1)/2);
|
||||
if (!enabled) yOffset++;
|
||||
DrawIconEx(hdc,2,rowY1+1+yOffset,enabled ? breakPoint : breakPointDisable,32,32,0,0,DI_NORMAL);
|
||||
}
|
||||
SetTextColor(hdc,textColor);
|
||||
|
@ -765,13 +765,44 @@ void CtrlDisAsmView::onChar(WPARAM wParam, LPARAM lParam)
|
|||
assembleOpcode(curAddress,str);
|
||||
}
|
||||
|
||||
|
||||
void CtrlDisAsmView::editBreakpoint()
|
||||
{
|
||||
BreakpointWindow win(wnd,debugger);
|
||||
|
||||
bool exists = false;
|
||||
if (CBreakPoints::IsAddressBreakPoint(curAddress))
|
||||
{
|
||||
auto breakpoints = CBreakPoints::GetBreakpoints();
|
||||
for (size_t i = 0; i < breakpoints.size(); i++)
|
||||
{
|
||||
if (breakpoints[i].addr == curAddress)
|
||||
{
|
||||
win.loadFromBreakpoint(breakpoints[i]);
|
||||
exists = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!exists)
|
||||
win.initBreakpoint(curAddress);
|
||||
|
||||
if (win.exec())
|
||||
{
|
||||
if (exists)
|
||||
CBreakPoints::RemoveBreakPoint(curAddress);
|
||||
win.addBreakpoint();
|
||||
}
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::onKeyDown(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
dontRedraw = false;
|
||||
u32 windowEnd = windowStart+visibleRows*instructionSize;
|
||||
keyTaken = true;
|
||||
|
||||
if (controlHeld)
|
||||
if (GetAsyncKeyState(VK_CONTROL))
|
||||
{
|
||||
switch (tolower(wParam & 0xFFFF))
|
||||
{
|
||||
|
@ -785,17 +816,21 @@ void CtrlDisAsmView::onKeyDown(WPARAM wParam, LPARAM lParam)
|
|||
disassembleToFile();
|
||||
break;
|
||||
case 'a':
|
||||
controlHeld = false;
|
||||
assembleOpcode(curAddress,"");
|
||||
break;
|
||||
case 'g':
|
||||
{
|
||||
u32 addr;
|
||||
controlHeld = false;
|
||||
if (executeExpressionWindow(wnd,debugger,addr) == false) return;
|
||||
gotoAddr(addr);
|
||||
}
|
||||
break;
|
||||
case 'e': // edit breakpoint
|
||||
editBreakpoint();
|
||||
break;
|
||||
case 'd': // toogle breakpoint enabled
|
||||
toggleBreakpoint(true);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch (wParam & 0xFFFF)
|
||||
|
@ -842,9 +877,6 @@ void CtrlDisAsmView::onKeyDown(WPARAM wParam, LPARAM lParam)
|
|||
case VK_TAB:
|
||||
displaySymbols = !displaySymbols;
|
||||
break;
|
||||
case VK_CONTROL:
|
||||
controlHeld = true;
|
||||
break;
|
||||
case VK_SPACE:
|
||||
debugger->toggleBreakpoint(curAddress);
|
||||
break;
|
||||
|
@ -858,12 +890,7 @@ void CtrlDisAsmView::onKeyDown(WPARAM wParam, LPARAM lParam)
|
|||
|
||||
void CtrlDisAsmView::onKeyUp(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (wParam & 0xFFFF)
|
||||
{
|
||||
case VK_CONTROL:
|
||||
controlHeld = false;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::scrollAddressIntoView()
|
||||
|
@ -895,7 +922,7 @@ void CtrlDisAsmView::redraw()
|
|||
UpdateWindow(wnd);
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::toggleBreakpoint()
|
||||
void CtrlDisAsmView::toggleBreakpoint(bool toggleEnabled)
|
||||
{
|
||||
bool enabled;
|
||||
if (CBreakPoints::IsAddressBreakPoint(curAddress,&enabled))
|
||||
|
@ -904,12 +931,16 @@ void CtrlDisAsmView::toggleBreakpoint()
|
|||
{
|
||||
// enable disabled breakpoints
|
||||
CBreakPoints::ChangeBreakPoint(curAddress,true);
|
||||
} else if (CBreakPoints::GetBreakPointCondition(curAddress) != NULL)
|
||||
} else if (!toggleEnabled && CBreakPoints::GetBreakPointCondition(curAddress) != NULL)
|
||||
{
|
||||
// don't just delete a breakpoint with a custom condition
|
||||
int ret = MessageBox(wnd,L"This breakpoint has a custom condition.\nDo you want to remove it?",L"Confirmation",MB_YESNO);
|
||||
if (ret != IDYES) return;
|
||||
CBreakPoints::RemoveBreakPoint(curAddress);
|
||||
if (ret == IDYES)
|
||||
CBreakPoints::RemoveBreakPoint(curAddress);
|
||||
} else if (toggleEnabled)
|
||||
{
|
||||
// disable breakpoint
|
||||
CBreakPoints::ChangeBreakPoint(curAddress,false);
|
||||
} else {
|
||||
// otherwise just remove breakpoint
|
||||
CBreakPoints::RemoveBreakPoint(curAddress);
|
||||
|
|
|
@ -83,7 +83,6 @@ class CtrlDisAsmView
|
|||
|
||||
std::vector<u32> jumpStack;
|
||||
|
||||
bool controlHeld;
|
||||
std::string searchQuery;
|
||||
int matchAddress;
|
||||
bool searching;
|
||||
|
@ -171,7 +170,8 @@ public:
|
|||
showHex=s;
|
||||
}
|
||||
|
||||
void toggleBreakpoint();
|
||||
void toggleBreakpoint(bool toggleEnabled = false);
|
||||
void editBreakpoint();
|
||||
|
||||
void scrollWindow(int lines)
|
||||
{
|
||||
|
|
|
@ -44,7 +44,6 @@ CtrlMemView::CtrlMemView(HWND _wnd)
|
|||
matchAddress = -1;
|
||||
searching = false;
|
||||
|
||||
ctrlDown = false;
|
||||
hasFocus = false;
|
||||
windowStart = curAddress;
|
||||
asciiSelected = false;
|
||||
|
@ -133,7 +132,6 @@ LRESULT CALLBACK CtrlMemView::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
|
|||
ccp->onChar(wParam,lParam);
|
||||
return 0;
|
||||
case WM_KEYUP:
|
||||
if (wParam == VK_CONTROL) ccp->ctrlDown = false;
|
||||
return 0;
|
||||
case WM_LBUTTONDOWN: SetFocus(hwnd); lmbDown=true; ccp->onMouseDown(wParam,lParam,1); break;
|
||||
case WM_RBUTTONDOWN: SetFocus(hwnd); rmbDown=true; ccp->onMouseDown(wParam,lParam,2); break;
|
||||
|
@ -304,13 +302,12 @@ void CtrlMemView::onVScroll(WPARAM wParam, LPARAM lParam)
|
|||
|
||||
void CtrlMemView::onKeyDown(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (ctrlDown)
|
||||
if (GetAsyncKeyState(VK_CONTROL))
|
||||
{
|
||||
switch (tolower(wParam & 0xFFFF))
|
||||
{
|
||||
case 'g':
|
||||
{
|
||||
ctrlDown = false;
|
||||
u32 addr;
|
||||
if (executeExpressionWindow(wnd,debugger,addr) == false) return;
|
||||
gotoAddr(addr);
|
||||
|
@ -347,9 +344,6 @@ void CtrlMemView::onKeyDown(WPARAM wParam, LPARAM lParam)
|
|||
case VK_PRIOR:
|
||||
scrollWindow(-visibleRows);
|
||||
break;
|
||||
case VK_CONTROL:
|
||||
ctrlDown = true;
|
||||
break;
|
||||
case VK_TAB:
|
||||
SendMessage(GetParent(wnd),WM_DEB_TABPRESSED,0,0);
|
||||
break;
|
||||
|
@ -360,7 +354,7 @@ void CtrlMemView::onKeyDown(WPARAM wParam, LPARAM lParam)
|
|||
|
||||
void CtrlMemView::onChar(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (ctrlDown || wParam == VK_TAB) return;
|
||||
if (GetAsyncKeyState(VK_CONTROL) || wParam == VK_TAB) return;
|
||||
|
||||
if (!Memory::IsValidAddress(curAddress))
|
||||
{
|
||||
|
@ -584,7 +578,6 @@ void CtrlMemView::search(bool continueSearch)
|
|||
u32 searchAddress;
|
||||
if (continueSearch == false || searchQuery[0] == 0)
|
||||
{
|
||||
ctrlDown = false;
|
||||
if (InputBox_GetString(GetModuleHandle(NULL),wnd,L"Search for", "",searchQuery) == false)
|
||||
{
|
||||
SetFocus(wnd);
|
||||
|
|
|
@ -37,7 +37,6 @@ class CtrlMemView
|
|||
int asciiStart;
|
||||
bool asciiSelected;
|
||||
int selectedNibble;
|
||||
bool ctrlDown;
|
||||
|
||||
int visibleRows;
|
||||
|
||||
|
|
|
@ -370,15 +370,11 @@ BOOL CDisasm::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
|||
break;
|
||||
|
||||
case ID_DEBUG_DSIPLAYREGISTERLIST:
|
||||
TabCtrl_SetCurSel(GetDlgItem(m_hDlg, IDC_LEFTTABS),0);
|
||||
ShowWindow(GetDlgItem(m_hDlg, IDC_REGLIST), SW_NORMAL);
|
||||
ShowWindow(GetDlgItem(m_hDlg, IDC_FUNCTIONLIST), SW_HIDE);
|
||||
leftTabs->ShowTab(0);
|
||||
break;
|
||||
|
||||
case ID_DEBUG_DSIPLAYFUNCTIONLIST:
|
||||
TabCtrl_SetCurSel(GetDlgItem(m_hDlg, IDC_LEFTTABS),1);
|
||||
ShowWindow(GetDlgItem(m_hDlg, IDC_REGLIST), SW_HIDE);
|
||||
ShowWindow(GetDlgItem(m_hDlg, IDC_FUNCTIONLIST), SW_NORMAL);
|
||||
leftTabs->ShowTab(1);
|
||||
break;
|
||||
|
||||
case ID_DEBUG_ADDBREAKPOINT:
|
||||
|
@ -644,12 +640,7 @@ BOOL CDisasm::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
|||
memory->gotoAddr(wParam);
|
||||
|
||||
// display the memory viewer too
|
||||
HWND bp = GetDlgItem(m_hDlg, IDC_BREAKPOINTLIST);
|
||||
HWND mem = GetDlgItem(m_hDlg, IDC_DEBUGMEMVIEW);
|
||||
HWND threads = GetDlgItem(m_hDlg, IDC_THREADLIST);
|
||||
ShowWindow(bp,SW_HIDE);
|
||||
ShowWindow(mem,SW_NORMAL);
|
||||
ShowWindow(threads,SW_HIDE);
|
||||
bottomTabs->ShowTab(GetDlgItem(m_hDlg,IDC_DEBUGMEMVIEW));
|
||||
}
|
||||
break;
|
||||
case WM_SIZE:
|
||||
|
|
Loading…
Add table
Reference in a new issue