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(); _cpu.reset();
_ppu.reset(); _ppu.reset();
_memoryManager.reset(); _memoryManager.reset();
_debugger.reset();
} }
void Console::LoadRom(VirtualFile romFile, VirtualFile patchFile) void Console::LoadRom(VirtualFile romFile, VirtualFile patchFile)
@ -64,7 +63,13 @@ void Console::LoadRom(VirtualFile romFile, VirtualFile patchFile)
_memoryManager->Initialize(cart, shared_from_this()); _memoryManager->Initialize(cart, shared_from_this());
_cpu.reset(new Cpu(_memoryManager)); _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; 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) void Console::ProcessCpuRead(uint32_t addr, uint8_t value, MemoryOperationType type)

View file

@ -29,6 +29,7 @@ private:
shared_ptr<DebugHud> _debugHud; shared_ptr<DebugHud> _debugHud;
SimpleLock _runLock; SimpleLock _runLock;
SimpleLock _debuggerLock;
atomic<bool> _stopFlag; atomic<bool> _stopFlag;
public: public:
@ -49,7 +50,7 @@ public:
shared_ptr<Ppu> GetPpu(); shared_ptr<Ppu> GetPpu();
shared_ptr<BaseCartridge> GetCartridge(); shared_ptr<BaseCartridge> GetCartridge();
shared_ptr<MemoryManager> GetMemoryManager(); 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 ProcessCpuRead(uint32_t addr, uint8_t value, MemoryOperationType type);
void ProcessCpuWrite(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" #include "../Core/DebugTypes.h"
extern shared_ptr<Console> _console; extern shared_ptr<Console> _console;
shared_ptr<Debugger> _debugger;
shared_ptr<Debugger> GetDebugger() shared_ptr<Debugger> GetDebugger()
{ {
if(!_debugger) { return _console->GetDebugger();
_debugger = _console->GetDebugger();
}
return _debugger;
} }
extern "C" extern "C"
@ -27,7 +22,7 @@ extern "C"
DllExport void __stdcall ReleaseDebugger() DllExport void __stdcall ReleaseDebugger()
{ {
_debugger.reset(); //_debugger.reset();
//_console->StopDebugger(); //_console->StopDebugger();
} }