From 10c3928eef28c026d0daa50916b20b5d02931770 Mon Sep 17 00:00:00 2001 From: Kingcom Date: Wed, 5 Mar 2014 18:51:43 +0100 Subject: [PATCH] Focus disassembly when a breakpoint triggered --- pcsx2/DebugTools/Breakpoints.cpp | 1 + pcsx2/DebugTools/Breakpoints.h | 4 ++++ pcsx2/gui/Debugger/DisassemblyDialog.cpp | 9 ++++++--- pcsx2/x86/ix86-32/iR5900-32.cpp | 2 ++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pcsx2/DebugTools/Breakpoints.cpp b/pcsx2/DebugTools/Breakpoints.cpp index 9bfaf6a563..71152b8929 100644 --- a/pcsx2/DebugTools/Breakpoints.cpp +++ b/pcsx2/DebugTools/Breakpoints.cpp @@ -11,6 +11,7 @@ u32 CBreakPoints::breakSkipFirstAt_ = 0; u64 CBreakPoints::breakSkipFirstTicks_ = 0; std::vector CBreakPoints::memChecks_; std::vector CBreakPoints::cleanupMemChecks_; +bool CBreakPoints::breakpointTriggered_ = false; int addressMask = 0x1FFFFFFF; diff --git a/pcsx2/DebugTools/Breakpoints.h b/pcsx2/DebugTools/Breakpoints.h index a136396987..c1be138427 100644 --- a/pcsx2/DebugTools/Breakpoints.h +++ b/pcsx2/DebugTools/Breakpoints.h @@ -150,6 +150,9 @@ public: static void Update(u32 addr = 0); + static void SetBreakpointTriggered(bool b) { breakpointTriggered_ = b; }; + static bool GetBreakpointTriggered() { return breakpointTriggered_; }; + private: static size_t FindBreakpoint(u32 addr, bool matchTemp = false, bool temp = false); // Finds exactly, not using a range check. @@ -158,6 +161,7 @@ private: static std::vector breakPoints_; static u32 breakSkipFirstAt_; static u64 breakSkipFirstTicks_; + static bool breakpointTriggered_; static std::vector memChecks_; static std::vector cleanupMemChecks_; diff --git a/pcsx2/gui/Debugger/DisassemblyDialog.cpp b/pcsx2/gui/Debugger/DisassemblyDialog.cpp index 7324d37c64..2c9f31c505 100644 --- a/pcsx2/gui/Debugger/DisassemblyDialog.cpp +++ b/pcsx2/gui/Debugger/DisassemblyDialog.cpp @@ -409,9 +409,12 @@ void DisassemblyDialog::setDebugMode(bool debugMode) eeTab->getDisassembly()->gotoPc(); iopTab->getDisassembly()->gotoPc(); - // Defocuses main window even when not debugging, causing savestate hotkeys to fail - /*if (currentCpu != NULL) - currentCpu->getDisassembly()->SetFocus();*/ + if (CBreakPoints::GetBreakpointTriggered()) + { + if (currentCpu != NULL) + currentCpu->getDisassembly()->SetFocus(); + CBreakPoints::SetBreakpointTriggered(false); + } } else { breakRunButton->SetLabel(L"Break"); diff --git a/pcsx2/x86/ix86-32/iR5900-32.cpp b/pcsx2/x86/ix86-32/iR5900-32.cpp index 45887de07e..e4dd361ae9 100644 --- a/pcsx2/x86/ix86-32/iR5900-32.cpp +++ b/pcsx2/x86/ix86-32/iR5900-32.cpp @@ -1278,6 +1278,7 @@ void dynarecCheckBreakpoint() if (cond && !cond->Evaluate()) return; + CBreakPoints::SetBreakpointTriggered(true); GetCoreThread().PauseSelf(); recExitExecution(); } @@ -1289,6 +1290,7 @@ void dynarecMemcheck() return; iFlushCall(FLUSH_INTERPRETER); + CBreakPoints::SetBreakpointTriggered(true); GetCoreThread().PauseSelf(); recExitExecution(); }