mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-09-05 12:15:19 +02:00
The interpreter's hot-path breakpoint check in RunUntilDowncountZeroWithChecks called Core_Break() unconditionally whenever IsAddressBreakPoint() was true - true for any non-ignored breakpoint, log-only included - instead of routing through BreakpointManager::ExecBreakPoint(), which is what actually respects BREAK_ACTION_LOG vs BREAK_ACTION_PAUSE. So a cpu.breakpoint.add with log=true and enabled=false still paused on hit, contradicting its own documented behavior. The JIT backends and IR interpreter don't have this bug - they already route through ExecBreakPoint() via JitBreakpoint()/IRRunBreakpoint() and check the result for BREAK_ACTION_PAUSE. Only this one plain interpreter loop had its own unconditional inline check instead. Verified: a log-only breakpoint now logs without pausing (325 hits logged, then execution continued past it normally); a normal enabled breakpoint still pauses; cpu.stepOver (which relies on temporary breakpoints, still correctly removed only when they actually pause) still steps over calls correctly; all 49 unit tests pass. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GZq8ZtJmFY7bkX5FVkr3P9 (cherry picked from commit 726db5e4ea3651db0eb2de13c622c033dcc95699)