Various debug ui fixes and enhancements

This commit is contained in:
Kingcom 2013-10-30 12:12:33 +01:00
parent cbe8245bad
commit 5bb7ac8b7e
7 changed files with 66 additions and 44 deletions

View file

@ -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;
}

View file

@ -43,5 +43,5 @@ public:
void addBreakpoint();
void loadFromMemcheck(MemCheck& memcheck);
void loadFromBreakpoint(BreakPoint& memcheck);
void initBreakpoint(u32 address);
};

View file

@ -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);

View file

@ -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)
{

View file

@ -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);

View file

@ -37,7 +37,6 @@ class CtrlMemView
int asciiStart;
bool asciiSelected;
int selectedNibble;
bool ctrlDown;
int visibleRows;

View file

@ -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: