redOn(""), colorOff("") {}
#endif
void EmitInitializedEvent() override {}
+ void EmitExecEvent(PID, const std::string& argv) override {}
void EmitStoppedEvent(StoppedEvent event) override;
void EmitExitedEvent(ExitedEvent event) override;
void EmitTerminatedEvent() override {}
void SetDebugger(Debugger *debugger) { m_debugger = debugger; }
virtual void EmitInitializedEvent() = 0;
+ virtual void EmitExecEvent(PID, const std::string& argv0) = 0;
virtual void EmitStoppedEvent(StoppedEvent event) = 0;
virtual void EmitExitedEvent(ExitedEvent event) = 0;
virtual void EmitTerminatedEvent() = 0;
return E_FAIL;
}
+ if (m_startupResult == S_OK)
+ m_protocol->EmitExecEvent(PID{m_processId}, fileExec);
+
return m_startupResult;
}
MIProtocol() : IProtocol(), m_varCounter(0) {}
void EmitInitializedEvent() override {}
+ void EmitExecEvent(PID, const std::string& argv0) override {}
void EmitStoppedEvent(StoppedEvent event) override;
void EmitExitedEvent(ExitedEvent event) override;
void EmitTerminatedEvent() override {}
// Types commonly used in the debugger:
+// Process identifier.
+class PID : public Utility::CustomScalarType<PID>
+{
+public:
+ typedef DWORD ScalarType;
+
+ explicit PID(ScalarType n) : m_pid{int(n)} {}
+ explicit operator ScalarType() const { return m_pid; }
+
+private:
+ int m_pid;
+};
+
// Data type deficated to carry thread id.
class ThreadId : public Utility::CustomScalarType<ThreadId>
{
EmitEvent("initialized", json::object());
}
+void VSCodeProtocol::EmitExecEvent(PID pid, const std::string& argv0)
+{
+ json body;
+
+ body["name"] = argv0;
+ body["systemProcessId"] = unsigned(pid);
+ body["isLocalProcess"] = true;
+ body["startMethod"] = "launch";
+
+ EmitEvent("process", body);
+}
+
void VSCodeProtocol::EmitCapabilitiesEvent()
{
LogFuncEntry();
}
void EmitInitializedEvent() override;
+ void EmitExecEvent(PID, const std::string& argv0) override;
void EmitStoppedEvent(StoppedEvent event) override;
void EmitExitedEvent(ExitedEvent event) override;
void EmitTerminatedEvent() override;