Mesen-SX/Core/DebugBreakHelper.h

42 lines
765 B
C
Raw Normal View History

2019-03-07 20:12:32 -05:00
#pragma once
#include "stdafx.h"
#include "Debugger.h"
#include "Console.h"
class DebugBreakHelper
{
private:
2020-12-19 23:30:09 +03:00
Debugger* _debugger;
2019-03-07 20:12:32 -05:00
bool _needResume = false;
bool _isEmulationThread = false;
public:
DebugBreakHelper(Debugger* debugger)
{
_debugger = debugger;
_isEmulationThread = debugger->GetConsole()->GetEmulationThreadId() == std::this_thread::get_id();
2020-12-19 23:30:09 +03:00
if (!_isEmulationThread)
{
2019-03-07 20:12:32 -05:00
//Only attempt to break if this is done in a thread other than the main emulation thread
debugger->BreakRequest(false);
2020-12-19 23:30:09 +03:00
if (!debugger->IsExecutionStopped())
{
while (!debugger->IsExecutionStopped())
{
}
2019-03-07 20:12:32 -05:00
_needResume = true;
}
}
}
~DebugBreakHelper()
{
2020-12-19 23:30:09 +03:00
if (!_isEmulationThread)
{
_debugger->BreakRequest(true);
2019-03-07 20:12:32 -05:00
}
}
2020-12-19 23:30:09 +03:00
};