Debugger: Fixed issues when switching from one game to another
This commit is contained in:
parent
85c84146bf
commit
5b1f62ab8e
3 changed files with 23 additions and 12 deletions
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue