annotate lldb/tools/lldb-vscode/RunInTerminal.h @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 2e18cbf3894f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 //===-- RunInTerminal.h ----------------------------------------*- C++ -*-===//
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 //
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 //
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 #ifndef LLDB_TOOLS_LLDB_VSCODE_RUNINTERMINAL_H
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 #define LLDB_TOOLS_LLDB_VSCODE_RUNINTERMINAL_H
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 #include "FifoFiles.h"
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 #include <future>
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 #include <thread>
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 namespace lldb_vscode {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 enum RunInTerminalMessageKind {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 eRunInTerminalMessageKindPID = 0,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 eRunInTerminalMessageKindError,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 eRunInTerminalMessageKindDidAttach,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 };
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 struct RunInTerminalMessage;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 struct RunInTerminalMessagePid;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 struct RunInTerminalMessageError;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 struct RunInTerminalMessageDidAttach;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 struct RunInTerminalMessage {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 RunInTerminalMessage(RunInTerminalMessageKind kind);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 virtual ~RunInTerminalMessage() = default;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 /// Serialize this object to JSON
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 virtual llvm::json::Value ToJSON() const = 0;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 const RunInTerminalMessagePid *GetAsPidMessage() const;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 const RunInTerminalMessageError *GetAsErrorMessage() const;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 RunInTerminalMessageKind kind;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 };
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 using RunInTerminalMessageUP = std::unique_ptr<RunInTerminalMessage>;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 struct RunInTerminalMessagePid : RunInTerminalMessage {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 RunInTerminalMessagePid(lldb::pid_t pid);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 llvm::json::Value ToJSON() const override;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 lldb::pid_t pid;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 };
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 struct RunInTerminalMessageError : RunInTerminalMessage {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 RunInTerminalMessageError(llvm::StringRef error);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 llvm::json::Value ToJSON() const override;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 std::string error;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 };
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 struct RunInTerminalMessageDidAttach : RunInTerminalMessage {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 RunInTerminalMessageDidAttach();
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 llvm::json::Value ToJSON() const override;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 };
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 class RunInTerminalLauncherCommChannel {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 public:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 RunInTerminalLauncherCommChannel(llvm::StringRef comm_file);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 /// Wait until the debug adaptor attaches.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 ///
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 /// \param[in] timeout
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 /// How long to wait to be attached.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 //
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 /// \return
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 /// An \a llvm::Error object in case of errors or if this operation times
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 /// out.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 llvm::Error WaitUntilDebugAdaptorAttaches(std::chrono::milliseconds timeout);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 /// Notify the debug adaptor this process' pid.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 ///
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 /// \return
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 /// An \a llvm::Error object in case of errors or if this operation times
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 /// out.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 llvm::Error NotifyPid();
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 /// Notify the debug adaptor that there's been an error.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 void NotifyError(llvm::StringRef error);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 private:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 FifoFileIO m_io;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 };
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 class RunInTerminalDebugAdapterCommChannel {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 public:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 RunInTerminalDebugAdapterCommChannel(llvm::StringRef comm_file);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 /// Notify the runInTerminal launcher that it was attached.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 ///
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 /// \return
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 /// A future indicated whether the runInTerminal launcher received the
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 /// message correctly or not.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 std::future<lldb::SBError> NotifyDidAttach();
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 /// Fetch the pid of the runInTerminal launcher.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 ///
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 /// \return
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 /// An \a llvm::Error object in case of errors or if this operation times
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 /// out.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 llvm::Expected<lldb::pid_t> GetLauncherPid();
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 /// Fetch any errors emitted by the runInTerminal launcher or return a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 /// default error message if a certain timeout if reached.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 std::string GetLauncherError();
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 private:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 FifoFileIO m_io;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 };
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 /// Create a fifo file used to communicate the debug adaptor with
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 /// the runInTerminal launcher.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 llvm::Expected<std::shared_ptr<FifoFile>> CreateRunInTerminalCommFile();
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 } // namespace lldb_vscode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 #endif // LLDB_TOOLS_LLDB_VSCODE_RUNINTERMINAL_H