From fc2efe5dff25a46b59ee23b987f1b3e07ceb62ae Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 23 Oct 2021 17:22:09 -0700 Subject: [PATCH] Debugger: Add reason to cpu.stepping event. --- Core/Core.cpp | 7 +++++++ Core/Core.h | 5 +++++ Core/Debugger/WebSocket/SteppingBroadcaster.cpp | 10 +++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Core/Core.cpp b/Core/Core.cpp index 1c49545941..1a469a0ca0 100644 --- a/Core/Core.cpp +++ b/Core/Core.cpp @@ -392,6 +392,13 @@ int Core_GetSteppingCounter() { return steppingCounter; } +SteppingReason Core_GetSteppingReason() { + SteppingReason r; + r.reason = steppingReason; + r.relatedAddress = steppingAddress; + return r; +} + const char *ExceptionTypeAsString(ExceptionType type) { switch (type) { case ExceptionType::MEMORY: return "Invalid Memory Access"; diff --git a/Core/Core.h b/Core/Core.h index 5ba51c10ba..62018b832d 100644 --- a/Core/Core.h +++ b/Core/Core.h @@ -41,6 +41,11 @@ void Core_UpdateSingleStep(); void Core_ProcessStepping(); // Changes every time we enter stepping. int Core_GetSteppingCounter(); +struct SteppingReason { + const char *reason = nullptr; + u32 relatedAddress = 0; +}; +SteppingReason Core_GetSteppingReason(); enum class CoreLifecycle { STARTING, diff --git a/Core/Debugger/WebSocket/SteppingBroadcaster.cpp b/Core/Debugger/WebSocket/SteppingBroadcaster.cpp index 7d9b224928..5d255d4f8e 100644 --- a/Core/Debugger/WebSocket/SteppingBroadcaster.cpp +++ b/Core/Debugger/WebSocket/SteppingBroadcaster.cpp @@ -23,6 +23,9 @@ #include "Core/System.h" struct CPUSteppingEvent { + CPUSteppingEvent(const SteppingReason &reason) : reason_(reason) { + } + operator std::string() { JsonWriter j; j.begin(); @@ -30,9 +33,14 @@ struct CPUSteppingEvent { j.writeUint("pc", currentMIPS->pc); // A double ought to be good enough for a 156 day debug session. j.writeFloat("ticks", CoreTiming::GetTicks()); + j.writeString("reason", reason_.reason); + j.writeUint("relatedAddress", reason_.relatedAddress); j.end(); return j.str(); } + +private: + const SteppingReason &reason_; }; // CPU has begun stepping (cpu.stepping) @@ -49,7 +57,7 @@ void SteppingBroadcaster::Broadcast(net::WebSocketServer *ws) { int steppingCounter = Core_GetSteppingCounter(); // We ignore CORE_POWERDOWN as a stepping state. if (coreState == CORE_STEPPING && steppingCounter != lastCounter_) { - ws->Send(CPUSteppingEvent()); + ws->Send(CPUSteppingEvent(Core_GetSteppingReason())); } else if (prevState_ == CORE_STEPPING && coreState != CORE_STEPPING && Core_IsActive()) { ws->Send(R"({"event":"cpu.resume"})"); }