// TODO: Report capabilities and check client support
m_startMethod = StartNone;
- pProtocol->EmitInitializedEvent();
return S_OK;
}
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;
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;
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;
// 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();
}
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;
void Cleanup() override;
void CommandLoop() override;
+ void EmitInitializedEvent();
void EmitCapabilitiesEvent();
};