Move VSCode protocol InitializedEvent after InitializeResponse.
authorMikhail Kurinnoi <m.kurinnoi@samsung.com>
Tue, 17 Sep 2024 09:30:41 +0000 (12:30 +0300)
committerGleb Balykov/Advanced System SW Lab /SRR/Staff Engineer/Samsung Electronics <g.balykov@samsung.com>
Wed, 18 Sep 2024 12:45:24 +0000 (15:45 +0300)
Fix for https://github.com/Samsung/netcoredbg/issues/161

src/debugger/manageddebugger.cpp
src/interfaces/iprotocol.h
src/protocols/cliprotocol.h
src/protocols/miprotocol.h
src/protocols/vscodeprotocol.cpp
src/protocols/vscodeprotocol.h

index 09ab58445752e5dbe4ae12d276b3c7fecaf32c93..8ae436ae83bf0813c7af6eee32991b0fbaf554cc 100644 (file)
@@ -246,7 +246,6 @@ HRESULT ManagedDebugger::Initialize()
 
     // TODO: Report capabilities and check client support
     m_startMethod = StartNone;
-    pProtocol->EmitInitializedEvent();
     return S_OK;
 }
 
index 4c92705ea99f1bcba8f2b154eb896212267d74e4..5987317e0a803a15e4119d7d7ad56bd5f069a23b 100644 (file)
@@ -31,7 +31,6 @@ protected:
 public:
     IProtocol(std::istream& input, std::ostream& output) : m_exit(false), m_sharedDebugger(nullptr), cin(input), cout(output)  {}
     void SetDebugger(std::shared_ptr<IDebugger> &sharedDebugger) { m_sharedDebugger = sharedDebugger; }
-    virtual void EmitInitializedEvent() = 0;
     virtual void EmitExecEvent(PID, const std::string& argv0) = 0;
     virtual void EmitStoppedEvent(const StoppedEvent &event) = 0;
     virtual void EmitExitedEvent(const ExitedEvent &event) = 0;
index 77f812ce6e9d6dd21e6dc8b560ce3cea0cac0041..e9115cd21cbc26726ecda8241515800a810f41bc 100644 (file)
@@ -85,7 +85,6 @@ class CLIProtocol : public IProtocol
 public:
     CLIProtocol(InStream& input, OutStream& output);
 
-    void EmitInitializedEvent() override {}
     void EmitExecEvent(PID, const std::string& argv) override {}
     void EmitStoppedEvent(const StoppedEvent &event) override;
     void EmitExitedEvent(const ExitedEvent &event) override;
index 7621bbb1b74b60dc4f2db6567e80026fb99725b3..3a878ee2ab324e287561a3bdb2dc71ca27bc69e5 100644 (file)
@@ -30,7 +30,6 @@ public:
 
     MIProtocol(std::istream& input, std::ostream& output) : IProtocol(input, output) {}
 
-    void EmitInitializedEvent() override {}
     void EmitExecEvent(PID, const std::string& argv0) override {}
     void EmitStoppedEvent(const StoppedEvent &event) override;
     void EmitExitedEvent(const ExitedEvent &event) override;
index a9c0b576bf312a082c60130323fb3a83f3ab5eea..66bab6556d182ecde71f66b76a7e1f2043d4f5f5 100644 (file)
@@ -1019,8 +1019,13 @@ void VSCodeProtocol::CommandsWorker()
         // Post command action.
         if (g_syncCommandExecutionSet.find(c.command) != g_syncCommandExecutionSet.end())
             m_commandSyncCV.notify_one();
+
         if (c.command == "disconnect")
             break;
+        // The Debug Adapter Protocol specifies that `InitializedEvent` occurs after the `InitializeRequest` has returned:
+        // https://microsoft.github.io/debug-adapter-protocol/specification#arrow_left-initialized-event
+        else if (c.command == "initialize" && SUCCEEDED(Status))
+            EmitInitializedEvent();
 
         lockCommandsMutex.lock();
     }
index 8fa95661a74bbf0e8c892b22eb37298953d9a80b..eeb1c14597639dd9817f61e17323d8a4cf44c60b 100644 (file)
@@ -66,7 +66,6 @@ public:
         m_execArgs = args;
     }
 
-    void EmitInitializedEvent() override;
     void EmitExecEvent(PID, const std::string& argv0) override;
     void EmitStoppedEvent(const StoppedEvent &event) override;
     void EmitExitedEvent(const ExitedEvent &event) override;
@@ -79,6 +78,7 @@ public:
     void Cleanup() override;
     void CommandLoop() override;
 
+    void EmitInitializedEvent();
     void EmitCapabilitiesEvent();
 };