Coverage Report

Created: 2022-01-18 06:27

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