Commit Graph
165 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Sonnet 5 f72709feb0 Legacy Win32 debugger: fix the painting problem with a frame-scoped mutex
Debugger windows (register list, disassembly view, memory view, breakpoint/
thread/module/stack lists, watch list) read CPU-thread-owned state directly
from the GUI thread's WM_PAINT/list-fill handlers, racing against the CPU
thread. Routing every read through Core_RunOnCPUThread would be too slow for
something invoked continuously on paint/list-refresh.

Add g_frameMutex (Core.h/Core.cpp), held by NativeFrame() only across the
span where it actually touches that state (running the CPU, processing
breakpoints, running the ImGui debugger) - not across input handling or the
present/frame-pacing waits. Debugger windows now hold the same mutex while
reading, giving synchronized reads without the round-trip cost of queuing
to the CPU thread.

CtrlRegisterList::onPaint() goes back to always reading live values (now
safe under the lock) and grays them out by color alone while the core is
running, rather than the earlier snapshot-caching approach.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hqm11k99viLfbJm2MkH4BH
2026-08-08 17:22:12 +02:00
Henrik RydgårdandClaude Sonnet 5 25c3c90c94 Legacy Win32 debugger: route mutations through the CPU thread
The Win32 debugger dialogs mutate CPU-thread-owned state (breakpoints,
symbol map, registers, memory, kernel threads) directly from the GUI
thread with no synchronization, same problem the WebSocket debugger had.
Route all of these through Core_RunOnCPUThread instead, following the
same pattern used there.

Also drops two forced-pause (Core_Break/Core_WaitInactive/Core_Resume)
dances in CtrlMemView::onChar and DumpMemoryWindow's dump handler, now
unnecessary since Core_RunOnCPUThread works whether the CPU is running
or already stepping.

Modal dialogs (MessageBox, InputBox_GetString, BreakpointWindow::exec,
etc.) are kept outside any queued callback so they never block the CPU
thread on user input. Pure reads/painting (disassembly formatting,
search, list reloads, onPaint) are intentionally left as-is for now.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hqm11k99viLfbJm2MkH4BH
2026-08-08 17:22:12 +02:00
Henrik RydgårdandClaude Sonnet 5 b1f0112cef Debugger: Remove opcode-fusion display and fix cpu step size units
DisassemblyManager used to fuse lui+addiu/load/store into single pseudo-
instructions ("li", fused loads/stores) for display. This only applied to a
handful of opcodes, complicated DisassemblyManager, and was the root cause of
a stepping bug: Core_PerformCPUStep's Into/Over cases treated stepSize as a
byte count, while the WebSocket cpu.stepInto handler computed it as an
instruction count (needed to step over a whole fused macro in one go) - so a
plain, non-fused stepInto silently executed zero instructions.

Removed the fusion logic entirely (DisassemblyMacro, DISTYPE_MACRO) - every
disassembly line is now exactly one 4-byte instruction. With that,
"how many instructions does this line span" is always 1, so the
getInstructionSizeAt() byte-size queries in the legacy Windows and ImGui
debuggers are gone too; step requests just pass 1. Core_RequestCPUStep's
stepSize is now consistently in instructions everywhere.

Also fixes the PPSSPPHeadless build, broken since 0ed1f3e added
OpenWebDebugger() (which calls System_LaunchUrl) without a headless stub.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hqm11k99viLfbJm2MkH4BH
2026-08-08 11:16:36 +02:00
Henrik Rydgård 9a7241708c Win32 file dialog: Prefill the filename when saving 2026-03-07 09:49:57 +01:00
Henrik Rydgård 330a638281 Add ability to copy function hash from the disassembly view
See #4179
2026-02-09 19:26:43 +01:00
oltolm 72f305c779 fix warnings and cmake windows build 2026-02-04 21:28:01 +01:00
Henrik Rydgård 4007e973f3 Driveby cleanup: Remove use of legacy <tchar.h> 2026-02-01 14:43:40 +01:00
Henrik Rydgård c20be71c10 Fix the API for MIPSAssembleOpcode to remove a global 2025-11-03 16:08:07 +01:00
Henrik Rydgård 5751e202a5 Remove redundant .c_str() 2025-08-31 13:37:43 +02:00
Henrik Rydgård 09e067c6e1 Revert "Get rid of remains of support for non-square screen DPIs"
This reverts commit f206ed95eb.
2025-05-21 21:41:50 +02:00
Henrik Rydgård ff37cbe184 Minor memory safety fixes 2025-05-14 09:39:09 +02:00
Henrik Rydgård f206ed95eb Get rid of remains of support for non-square screen DPIs 2025-02-20 11:14:26 -06:00
Henrik Rydgård 23954f5403 Implement the disassembly mode too 2025-01-09 13:35:29 +01:00
Henrik Rydgård 3e198c53b2 More include cleanup 2024-12-18 13:57:26 +01:00
Henrik Rydgård 597be1c9bc Stop pretending that DisassemblyManager isn't a singleton - it currently is. 2024-12-12 19:25:04 +01:00
Henrik Rydgård 637d15434e Minor code cleanup. Add Goto LR button 2024-12-10 22:56:03 +01:00
Henrik Rydgård 7992ff4627 Make CBreakpoints an object 2024-11-25 00:22:53 +01:00
Henrik Rydgård a8744f5992 Disable the native debugger when RetroAchievements hardcore mode is enabled 2024-11-10 19:19:03 +01:00
Henrik Rydgård 2767fb1f9e Actually fix the black background in the win32 debugger 2024-11-07 12:55:53 +01:00
Henrik Rydgård cf6d06c56a Start work on imdbg 2024-11-07 11:10:12 +01:00
Henrik Rydgård c787149472 Start moving the CPU debug-step logic to Core.cpp 2024-11-03 17:54:51 +01:00
Henrik Rydgård f020d1d815 Windows inputbox: Add flags field, delete dupe code, add ability to mask passwords 2024-09-26 10:48:31 +02:00
Henrik Rydgård f2ee437323 Merge pull request #18579 from GermanAizek/emplace_back
Minor replaced insert to emplace C++11
2023-12-19 14:30:26 +01:00
Herman Semenov 4ea842a3c1 Minor replaced insert to emplace C++11 2023-12-19 16:06:48 +03:00
Henrik Rydgård 6140321be5 Merge pull request #18566 from Nemoumbra/debugger-ui-fix
Stop opening some context menus when the game's not loaded
2023-12-17 16:31:41 +01:00
Herman Semenov 3d422b11c0 [GPU Common Vulkan/UI/Windows Debugger] Added const reference for function params 2023-12-14 14:23:31 +03:00
Nemoumbra a4fe83ea20 Stop some UI elements from opening when the game's not loaded 2023-12-14 01:40:46 +03:00
Nemoumbra 5ca099a747 Scan/remove -> edit symbols 2023-07-17 16:38:24 +03:00
Nemoumbra 23cbddd3c6 Logical error fixed and func list properly updated now 2023-07-08 22:40:11 +03:00
Nemoumbra abd2b21d60 Added the logic to the ScanRemoveWindow 2023-07-08 22:40:11 +03:00
Unknown W. Brackets 6da10463f9 Debugger: Make reg names safer, stop using v000.
Better to use S000, etc. as that's more clear throughout.
2023-04-29 09:48:33 -07:00
Henrik Rydgård 6945deec01 Replace a LOT of sprintf with snprintf, and a few strcpy with truncate_cpy 2023-04-28 21:04:05 +02:00
Unknown W. Brackets 9cebfc31b3 Debugger: Avoid unaligned reads in expressions.
Potentially, a watch or break condition could crash if it was unaligned
between mirrors.  This might happen if it's not the condition you wanted,
especially.  Play it safe.
2023-04-12 01:14:30 -07:00
Unknown W. Brackets 2374696d65 Debugger: Show vector load/store previews. 2023-04-09 11:09:36 -07:00
Unknown W. Brackets be8a173026 Debugger: Clear button flags on lost focus.
This mouse tracking is kinda ugly.  This works around an issue where when
you removed a custom condition, the highlight would stick as if you were
dragging.
2023-04-09 10:11:37 -07:00
Henrik Rydgård 82097b4a3b Implement NopInstruction feature in debugger
See #16975
2023-03-02 14:30:53 +01:00
Henrik Rydgård f55782558c Debugger: Copy Address will now copy addresses for the whole selection 2023-03-02 13:59:07 +01:00
Henrik Rydgård 8b431b39ba Wrap the display globals in a struct (#16998)
* Wrap the display globals in a struct

Makes it easier to search/replace these, for future refactorings.

* Some renaming

* Qt buildfix, also fix the Qt build on Mac (got broken with battery changes)

* Attempt at buildfixing ios

* UWP buildfix
2023-02-25 13:09:44 +01:00
Unknown W. Brackets a7b7bf7826 Global: Set many read-only params as const.
This makes what they do and which args to use clearer, if nothing else.
2022-12-10 21:13:36 -08:00
Herman Semenov 29b87e0c0b Merge branch 'master' into master 2022-10-03 07:49:13 +00:00
Unknown W. Brackets ac335ad61a armips: Update to UTF-8/c++17 armips. 2022-09-30 19:48:14 -07:00
lainon fec708489a Correct cleaning string and remove unused vars 2022-09-30 12:26:30 +03:00
Unknown W. Brackets 1233d1d376 Reporting: Disable when debugger methods used.
This won't catch all means of hacking memory, but will catch some.
Trying to reduce noise in reporting from debugging.
2022-07-30 18:21:32 -07:00
Unknown W. Brackets 9435938ad9 Debugger: Cleanup some header pollution.
Also simplify just a bit.
2022-02-13 07:55:34 -08:00
Unknown W. Brackets de1a6a93d8 Debugger: Debounce redraws using timers. 2021-12-12 10:22:21 -08:00
Unknown W. Brackets 39d3b4d933 Debugger: Centralize context menu handling.
This deduplicates a bit, but more importantly keeps all the IDs together.
2021-10-07 19:48:13 -07:00
Unknown W. Brackets 58238abef5 Debugger: Fix submenu offsets from removing unused.
The wrong menus were showing in several places, especially the GE
debugger.
2021-10-07 07:04:33 -07:00
Unknown W. Brackets 882c22aa79 Windows: Remove some unused constants. 2021-10-03 06:53:58 -07:00
Unknown W. Brackets 012d47bcbf Debugger: Show string in status bar for li, etc.
This is helpful when stepping through the debugger.  Only shows likely
UTF-8 or similar formatted text, but often names or error messages are.
2021-04-21 23:50:59 -07:00
Unknown W. Brackets 2932a9995f Debugger: Prompt with previous search string.
When searching, fill the text box with the previous search by default.
Convenient when you want to edit it.
2021-04-21 19:47:18 -07:00