From edda865afbe24409ac2e8ba9afeb5e96f26a4c1d Mon Sep 17 00:00:00 2001 From: Morilli <35152647+Morilli@users.noreply.github.com> Date: Tue, 27 May 2025 14:27:12 +0200 Subject: [PATCH] "fix" debugger display after breakpoint hits Breakpoint hits don't actually pause execution, so it's necessary to immediately update the disassember view as the core will continue executing after. This isn't great design but whatever --- .../tools/Debugger/BreakpointControl.cs | 2 +- .../Debugger/GenericDebugger.Disassembler.cs | 3 +-- .../tools/Debugger/GenericDebugger.IToolForm.cs | 17 ++++++++++++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs b/src/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs index c10f28fb85..0e84615fa7 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs @@ -56,7 +56,7 @@ namespace BizHawk.Client.EmuHawk private void BreakpointCallback(uint addr, uint value, uint flags) { MainForm.PauseEmulator(); - UpdateValues(); + ParentDebugger.UpdateForBreakpointHit(); MainForm.AddOnScreenMessage("Breakpoint hit"); } diff --git a/src/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs b/src/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs index 649d544367..b6cef4c476 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs @@ -66,6 +66,7 @@ namespace BizHawk.Client.EmuHawk _disassemblyLines.Add(new DisasmOp(currentAddress, advance, line)); currentAddress += (uint)advance; } + DisassemblerView.Refresh(); } private void DisassemblerView_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) @@ -149,14 +150,12 @@ namespace BizHawk.Client.EmuHawk { IncrementCurrentAddress(); Disassemble(); - DisassemblerView.Refresh(); } private void SmallDecrement() { DecrementCurrentAddress(); Disassemble(); - DisassemblerView.Refresh(); } private void DisassemblerView_KeyDown(object sender, KeyEventArgs e) diff --git a/src/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.IToolForm.cs b/src/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.IToolForm.cs index 6b4624f6a3..c5e05550e7 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.IToolForm.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.IToolForm.cs @@ -31,6 +31,8 @@ namespace BizHawk.Client.EmuHawk private bool CanStepOut = false; + private bool _breakpointHit; + private void UpdateCapabilitiesProps() { try @@ -96,6 +98,12 @@ namespace BizHawk.Client.EmuHawk } } + public void UpdateForBreakpointHit() + { + _breakpointHit = true; + FullUpdate(); + } + private void FullUpdate() { RegisterPanel.UpdateValues(); @@ -115,7 +123,14 @@ namespace BizHawk.Client.EmuHawk protected override void UpdateAfter() { - if (MainForm.EmulatorPaused) FullUpdate(); + if (_breakpointHit) + { + _breakpointHit = false; + } + else + { + FullUpdate(); + } } } }