Debugger: Improved pause/unpause behavior when opening/closing debugger or loading states with debugger opened
This commit is contained in:
parent
8ee5bd5a10
commit
ed00a02c51
4 changed files with 29 additions and 10 deletions
|
@ -465,12 +465,22 @@ ConsoleLock Console::AcquireLock()
|
|||
|
||||
void Console::Lock()
|
||||
{
|
||||
shared_ptr<Debugger> debugger = _debugger;
|
||||
if(debugger) {
|
||||
debugger->SuspendDebugger(false);
|
||||
}
|
||||
|
||||
_lockCounter++;
|
||||
_runLock.Acquire();
|
||||
}
|
||||
|
||||
void Console::Unlock()
|
||||
{
|
||||
shared_ptr<Debugger> debugger = _debugger;
|
||||
if(debugger) {
|
||||
debugger->SuspendDebugger(true);
|
||||
}
|
||||
|
||||
_runLock.Release();
|
||||
_lockCounter--;
|
||||
}
|
||||
|
@ -619,7 +629,15 @@ shared_ptr<Debugger> Console::GetDebugger(bool autoStart)
|
|||
|
||||
void Console::StopDebugger()
|
||||
{
|
||||
//Pause/unpause the regular emulation thread based on the debugger's pause state
|
||||
_paused = IsPaused();
|
||||
|
||||
shared_ptr<Debugger> debugger = _debugger;
|
||||
debugger->SuspendDebugger(false);
|
||||
Lock();
|
||||
_debugger.reset();
|
||||
|
||||
Unlock();
|
||||
}
|
||||
|
||||
bool Console::IsDebugging()
|
||||
|
|
|
@ -6,18 +6,10 @@
|
|||
ConsoleLock::ConsoleLock(Console *console)
|
||||
{
|
||||
_console = console;
|
||||
|
||||
_debugger = _console->GetDebugger(false);
|
||||
if(_debugger) {
|
||||
_debugger->SuspendDebugger(false);
|
||||
}
|
||||
_console->Lock();
|
||||
}
|
||||
|
||||
ConsoleLock::~ConsoleLock()
|
||||
{
|
||||
if(_debugger) {
|
||||
_debugger->SuspendDebugger(true);
|
||||
}
|
||||
_console->Unlock();
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ class ConsoleLock
|
|||
{
|
||||
private:
|
||||
Console *_console = nullptr;
|
||||
shared_ptr<Debugger> _debugger;
|
||||
|
||||
public:
|
||||
ConsoleLock(Console *console);
|
||||
|
|
|
@ -81,6 +81,10 @@ Debugger::Debugger(shared_ptr<Console> console)
|
|||
_codeDataLogger->LoadCdlFile(cdlFile);
|
||||
|
||||
RefreshCodeCache();
|
||||
|
||||
if(_console->IsPaused()) {
|
||||
Step(CpuType::Cpu, 1, StepType::Step);
|
||||
}
|
||||
}
|
||||
|
||||
Debugger::~Debugger()
|
||||
|
@ -374,7 +378,13 @@ void Debugger::BreakRequest(bool release)
|
|||
void Debugger::SuspendDebugger(bool release)
|
||||
{
|
||||
if(release) {
|
||||
_suspendRequestCount--;
|
||||
if(_suspendRequestCount > 0) {
|
||||
_suspendRequestCount--;
|
||||
} else {
|
||||
#ifdef _DEBUG
|
||||
throw std::runtime_error("unexpected debugger suspend::release call");
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
_suspendRequestCount++;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue