Debugger: Fixed issues when switching from one game to another

This commit is contained in:
Sour 2019-02-16 00:47:53 -05:00
parent 85c84146bf
commit 5b1f62ab8e
3 changed files with 23 additions and 12 deletions

View file

@ -49,7 +49,6 @@ void Console::Stop()
_cpu.reset();
_ppu.reset();
_memoryManager.reset();
_debugger.reset();
}
void Console::LoadRom(VirtualFile romFile, VirtualFile patchFile)
@ -64,7 +63,13 @@ void Console::LoadRom(VirtualFile romFile, VirtualFile patchFile)
_memoryManager->Initialize(cart, shared_from_this());
_cpu.reset(new Cpu(_memoryManager));
_debugger.reset(new Debugger(shared_from_this()));
if(_debugger) {
//Reset debugger if it was running before
auto lock = _debuggerLock.AcquireSafe();
_debugger.reset();
GetDebugger();
}
}
}
@ -108,9 +113,19 @@ shared_ptr<MemoryManager> Console::GetMemoryManager()
return _memoryManager;
}
shared_ptr<Debugger> Console::GetDebugger(bool allowStart)
shared_ptr<Debugger> Console::GetDebugger(bool autoStart)
{
return _debugger;
shared_ptr<Debugger> debugger = _debugger;
if(!debugger && autoStart) {
//Lock to make sure we don't try to start debuggers in 2 separate threads at once
auto lock = _debuggerLock.AcquireSafe();
debugger = _debugger;
if(!debugger) {
debugger.reset(new Debugger(shared_from_this()));
_debugger = debugger;
}
}
return debugger;
}
void Console::ProcessCpuRead(uint32_t addr, uint8_t value, MemoryOperationType type)

View file

@ -29,6 +29,7 @@ private:
shared_ptr<DebugHud> _debugHud;
SimpleLock _runLock;
SimpleLock _debuggerLock;
atomic<bool> _stopFlag;
public:
@ -49,7 +50,7 @@ public:
shared_ptr<Ppu> GetPpu();
shared_ptr<BaseCartridge> GetCartridge();
shared_ptr<MemoryManager> GetMemoryManager();
shared_ptr<Debugger> GetDebugger(bool allowStart = true);
shared_ptr<Debugger> GetDebugger(bool autoStart = true);
void ProcessCpuRead(uint32_t addr, uint8_t value, MemoryOperationType type);
void ProcessCpuWrite(uint32_t addr, uint8_t value, MemoryOperationType type);

View file

@ -6,15 +6,10 @@
#include "../Core/DebugTypes.h"
extern shared_ptr<Console> _console;
shared_ptr<Debugger> _debugger;
shared_ptr<Debugger> GetDebugger()
{
if(!_debugger) {
_debugger = _console->GetDebugger();
}
return _debugger;
return _console->GetDebugger();
}
extern "C"
@ -27,7 +22,7 @@ extern "C"
DllExport void __stdcall ReleaseDebugger()
{
_debugger.reset();
//_debugger.reset();
//_console->StopDebugger();
}