diff --git a/Common/Log.h b/Common/Log.h index f10bbbb18a..9c6a8e088f 100644 --- a/Common/Log.h +++ b/Common/Log.h @@ -53,6 +53,7 @@ enum class Log { HTTP, Printf, TexReplacement, + Debugger, GeDebugger, UI, IAP, diff --git a/Common/Log/LogManager.cpp b/Common/Log/LogManager.cpp index b31ba0bad6..00973b178a 100644 --- a/Common/Log/LogManager.cpp +++ b/Common/Log/LogManager.cpp @@ -93,6 +93,7 @@ static const char * const g_logTypeNames[] = { "PRINTF", "TEXREPLACE", "DEBUGGER", + "GEDEBUGGER", "UI", "IAP", "SCEAUDIO", diff --git a/Core/Debugger/WebSocket.cpp b/Core/Debugger/WebSocket.cpp index cd2199934c..6e12abe5db 100644 --- a/Core/Debugger/WebSocket.cpp +++ b/Core/Debugger/WebSocket.cpp @@ -132,7 +132,7 @@ void HandleDebuggerRequest(const http::ServerRequest &request) { if (!ws) return; - SetCurrentThreadName("Debugger"); + SetCurrentThreadName("WebSocketDebugger"); UpdateConnected(1); SetupDebuggerLock(); @@ -144,7 +144,7 @@ void HandleDebuggerRequest(const http::ServerRequest &request) { InputBroadcaster input; SteppingBroadcaster stepping; - std::unordered_map eventHandlers; + DebuggerEventHandlerMap eventHandlers; std::vector subscriberData; for (auto init : subscribers) { std::lock_guard guard(lifecycleLock); @@ -167,6 +167,8 @@ void HandleDebuggerRequest(const http::ServerRequest &request) { return; } + DEBUG_LOG(Log::Debugger, "WS: Handling '%s'", event); + DebuggerRequest req(event, ws, root, &client_info); auto eventFunc = eventHandlers.find(event); if (eventFunc != eventHandlers.end()) { @@ -180,7 +182,9 @@ void HandleDebuggerRequest(const http::ServerRequest &request) { req.Fail("Bad message: unknown event"); } }); + ws->SetBinaryHandler([&](const std::vector &d) { + ERROR_LOG(Log::Debugger, "Received binary WebSocket frame, not supported"); ws->Send(DebuggerErrorEvent("Bad message: binary WebSocket frames are not supported", LogLevel::LERROR)); }); diff --git a/Core/Debugger/WebSocket/DisasmSubscriber.cpp b/Core/Debugger/WebSocket/DisasmSubscriber.cpp index 697aab3755..b8e4473b98 100644 --- a/Core/Debugger/WebSocket/DisasmSubscriber.cpp +++ b/Core/Debugger/WebSocket/DisasmSubscriber.cpp @@ -52,11 +52,10 @@ protected: DebuggerSubscriber *WebSocketDisasmInit(DebuggerEventHandlerMap &map) { auto p = new WebSocketDisasmState(); - map["memory.base"] = std::bind(&WebSocketDisasmState::Base, p, std::placeholders::_1); - map["memory.disasm"] = std::bind(&WebSocketDisasmState::Disasm, p, std::placeholders::_1); - map["memory.searchDisasm"] = std::bind(&WebSocketDisasmState::SearchDisasm, p, std::placeholders::_1); - map["memory.assemble"] = std::bind(&WebSocketDisasmState::Assemble, p, std::placeholders::_1); - + map["memory.base"] = [p](DebuggerRequest &req) { p->Base(req); }; + map["memory.disasm"] = [p](DebuggerRequest &req) { p->Disasm(req); }; + map["memory.searchDisasm"] = [p](DebuggerRequest &req) { p->SearchDisasm(req); }; + map["memory.assemble"] = [p](DebuggerRequest &req) { p->Assemble(req); }; return p; } diff --git a/Core/Debugger/WebSocket/GPURecordSubscriber.cpp b/Core/Debugger/WebSocket/GPURecordSubscriber.cpp index 1a8f9e413a..91d42b7b36 100644 --- a/Core/Debugger/WebSocket/GPURecordSubscriber.cpp +++ b/Core/Debugger/WebSocket/GPURecordSubscriber.cpp @@ -38,7 +38,7 @@ protected: DebuggerSubscriber *WebSocketGPURecordInit(DebuggerEventHandlerMap &map) { auto p = new WebSocketGPURecordState(); - map["gpu.record.dump"] = std::bind(&WebSocketGPURecordState::Dump, p, std::placeholders::_1); + map["gpu.record.dump"] = [p](DebuggerRequest &req) { p->Dump(req); }; return p; } diff --git a/Core/Debugger/WebSocket/GPUStatsSubscriber.cpp b/Core/Debugger/WebSocket/GPUStatsSubscriber.cpp index c1559781e9..5d26e12541 100644 --- a/Core/Debugger/WebSocket/GPUStatsSubscriber.cpp +++ b/Core/Debugger/WebSocket/GPUStatsSubscriber.cpp @@ -89,8 +89,8 @@ protected: DebuggerSubscriber *WebSocketGPUStatsInit(DebuggerEventHandlerMap &map) { auto p = new WebSocketGPUStatsState(); - map["gpu.stats.get"] = std::bind(&WebSocketGPUStatsState::Get, p, std::placeholders::_1); - map["gpu.stats.feed"] = std::bind(&WebSocketGPUStatsState::Feed, p, std::placeholders::_1); + map["gpu.stats.get"] = [p](DebuggerRequest &req) { p->Get(req); }; + map["gpu.stats.feed"] = [p](DebuggerRequest &req) { p->Feed(req); }; return p; } diff --git a/Core/Debugger/WebSocket/InputSubscriber.cpp b/Core/Debugger/WebSocket/InputSubscriber.cpp index 218ddb13a5..63a5e1103e 100644 --- a/Core/Debugger/WebSocket/InputSubscriber.cpp +++ b/Core/Debugger/WebSocket/InputSubscriber.cpp @@ -95,9 +95,9 @@ const std::unordered_map &WebSocketInputButtonLookup() { DebuggerSubscriber *WebSocketInputInit(DebuggerEventHandlerMap &map) { auto p = new WebSocketInputState(); - map["input.buttons.send"] = std::bind(&WebSocketInputState::ButtonsSend, p, std::placeholders::_1); - map["input.buttons.press"] = std::bind(&WebSocketInputState::ButtonsPress, p, std::placeholders::_1); - map["input.analog.send"] = std::bind(&WebSocketInputState::AnalogSend, p, std::placeholders::_1); + map["input.buttons.send"] = [p](DebuggerRequest &req) { p->ButtonsSend(req); }; + map["input.buttons.press"] = [p](DebuggerRequest &req) { p->ButtonsPress(req); }; + map["input.analog.send"] = [p](DebuggerRequest &req) { p->AnalogSend(req); }; return p; } diff --git a/Core/Debugger/WebSocket/MemoryInfoSubscriber.cpp b/Core/Debugger/WebSocket/MemoryInfoSubscriber.cpp index a908f62bfd..29d647a917 100644 --- a/Core/Debugger/WebSocket/MemoryInfoSubscriber.cpp +++ b/Core/Debugger/WebSocket/MemoryInfoSubscriber.cpp @@ -45,11 +45,11 @@ protected: DebuggerSubscriber *WebSocketMemoryInfoInit(DebuggerEventHandlerMap &map) { auto p = new WebSocketMemoryInfoState(); - map["memory.mapping"] = std::bind(&WebSocketMemoryInfoState::Mapping, p, std::placeholders::_1); - map["memory.info.config"] = std::bind(&WebSocketMemoryInfoState::Config, p, std::placeholders::_1); - map["memory.info.set"] = std::bind(&WebSocketMemoryInfoState::Set, p, std::placeholders::_1); - map["memory.info.list"] = std::bind(&WebSocketMemoryInfoState::List, p, std::placeholders::_1); - map["memory.info.search"] = std::bind(&WebSocketMemoryInfoState::Search, p, std::placeholders::_1); + map["memory.mapping"] = [p](DebuggerRequest &req) { p->Mapping(req); }; + map["memory.info.config"] = [p](DebuggerRequest &req) { p->Config(req); }; + map["memory.info.set"] = [p](DebuggerRequest &req) { p->Set(req); }; + map["memory.info.list"] = [p](DebuggerRequest &req) { p->List(req); }; + map["memory.info.search"] = [p](DebuggerRequest &req) { p->Search(req); }; return p; } diff --git a/Core/Debugger/WebSocket/SteppingSubscriber.cpp b/Core/Debugger/WebSocket/SteppingSubscriber.cpp index 303c345a9b..04c2824455 100644 --- a/Core/Debugger/WebSocket/SteppingSubscriber.cpp +++ b/Core/Debugger/WebSocket/SteppingSubscriber.cpp @@ -51,12 +51,11 @@ protected: DebuggerSubscriber *WebSocketSteppingInit(DebuggerEventHandlerMap &map) { auto p = new WebSocketSteppingState(); - map["cpu.stepInto"] = std::bind(&WebSocketSteppingState::Into, p, std::placeholders::_1); - map["cpu.stepOver"] = std::bind(&WebSocketSteppingState::Over, p, std::placeholders::_1); - map["cpu.stepOut"] = std::bind(&WebSocketSteppingState::Out, p, std::placeholders::_1); - map["cpu.runUntil"] = std::bind(&WebSocketSteppingState::RunUntil, p, std::placeholders::_1); - map["cpu.nextHLE"] = std::bind(&WebSocketSteppingState::HLE, p, std::placeholders::_1); - + map["cpu.stepInto"] = [p](DebuggerRequest &req) { p->Into(req); }; + map["cpu.stepOver"] = [p](DebuggerRequest &req) { p->Over(req); }; + map["cpu.stepOut"] = [p](DebuggerRequest &req) { p->Out(req); }; + map["cpu.runUntil"] = [p](DebuggerRequest &req) { p->RunUntil(req); }; + map["cpu.nextHLE"] = [p](DebuggerRequest &req) { p->HLE(req); }; return p; } diff --git a/Core/Debugger/WebSocket/WebSocketUtils.h b/Core/Debugger/WebSocket/WebSocketUtils.h index 3a4e5fc263..ba74d4c9f9 100644 --- a/Core/Debugger/WebSocket/WebSocketUtils.h +++ b/Core/Debugger/WebSocket/WebSocketUtils.h @@ -38,7 +38,7 @@ struct WebSocketClientInfo { std::string name; std::string version; - std::map disallowed; + std::map disallowed; }; struct DebuggerErrorEvent { @@ -117,6 +117,6 @@ public: }; typedef std::function DebuggerEventHandler; -typedef std::unordered_map DebuggerEventHandlerMap; +typedef std::unordered_map DebuggerEventHandlerMap; uint32_t RoundMemAddressUp(uint32_t addr); diff --git a/Core/WebServer.cpp b/Core/WebServer.cpp index 0c46659e69..710479c98e 100644 --- a/Core/WebServer.cpp +++ b/Core/WebServer.cpp @@ -170,7 +170,7 @@ static std::string RemotePathForRecent(const std::string &filename) { return std::string(); } -static Path LocalFromRemotePath(const std::string_view &path) { +static Path LocalFromRemotePath(std::string_view path) { switch ((RemoteISOShareType)g_Config.iRemoteISOShareType) { case RemoteISOShareType::RECENT: for (const std::string &filename : g_recentFiles.GetRecentFiles()) {