1 //===-- SBTrace.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_API_SBTRACE_H
10 #define LLDB_API_SBTRACE_H
11 
12 #include "lldb/API/SBDefines.h"
13 #include "lldb/API/SBError.h"
14 #include "lldb/API/SBTraceCursor.h"
15 
16 namespace lldb {
17 
18 class LLDB_API SBTrace {
19 public:
20   /// Default constructor for an invalid Trace object.
21   SBTrace();
22 
23   /// See SBDebugger::LoadTraceFromFile.
24   static SBTrace LoadTraceFromFile(SBError &error, SBDebugger &debugger,
25                                    const SBFileSpec &trace_description_file);
26 
27   /// Get a \a TraceCursor for the given thread's trace.
28   ///
29   /// \param[out] error
30   ///   This will be set with an error in case of failures.
31   //
32   /// \param[in] thread
33   ///   The thread to get a \a TraceCursor for.
34   //
35   /// \return
36   ///     A \a SBTraceCursor. If the thread is not traced or its trace
37   ///     information failed to load, an invalid \a SBTraceCursor is returned
38   ///     and the \p error parameter is set.
39   SBTraceCursor CreateNewCursor(SBError &error, SBThread &thread);
40 
41   /// Save the trace to the specified directory, which will be created if
42   /// needed. This will also create a a file \a <directory>/trace.json with the
43   /// main properties of the trace session, along with others files which
44   /// contain the actual trace data. The trace.json file can be used later as
45   /// input for the "trace load" command to load the trace in LLDB, or for the
46   /// method \a SBDebugger.LoadTraceFromFile().
47   ///
48   /// \param[out] error
49   ///   This will be set with an error in case of failures.
50   ///
51   /// \param[in] bundle_dir
52   ///   The directory where the trace files will be saved.
53   ///
54   /// \param[in] compact
55   ///   Try not to save to disk information irrelevant to the traced processes.
56   ///   Each trace plug-in implements this in a different fashion.
57   ///
58   /// \return
59   ///   A \a SBFileSpec pointing to the bundle description file.
60   SBFileSpec SaveToDisk(SBError &error, const SBFileSpec &bundle_dir,
61                         bool compact = false);
62 
63   /// \return
64   ///     A description of the parameters to use for the \a SBTrace::Start
65   ///     method, or \b null if the object is invalid.
66   const char *GetStartConfigurationHelp();
67 
68   /// Start tracing all current and future threads in a live process using a
69   /// provided configuration. This is referred as "process tracing" in the
70   /// documentation.
71   ///
72   /// This is equivalent to the command "process trace start".
73   ///
74   /// This operation fails if it is invoked twice in a row without
75   /// first stopping the process trace with \a SBTrace::Stop().
76   ///
77   /// If a thread is already being traced explicitly, e.g. with \a
78   /// SBTrace::Start(const SBThread &thread, const SBStructuredData
79   /// &configuration), it is left unaffected by this operation.
80   ///
81   /// \param[in] configuration
82   ///     Dictionary object with custom fields for the corresponding trace
83   ///     technology.
84   ///
85   ///     Full details for the trace start parameters that can be set can be
86   ///     retrieved by calling \a SBTrace::GetStartConfigurationHelp().
87   ///
88   /// \return
89   ///     An error explaining any failures.
90   SBError Start(const SBStructuredData &configuration);
91 
92   /// Start tracing a specific thread in a live process using a provided
93   /// configuration. This is referred as "thread tracing" in the documentation.
94   ///
95   /// This is equivalent to the command "thread trace start".
96   ///
97   /// If the thread is already being traced by a "process tracing" operation,
98   /// e.g. with \a SBTrace::Start(const SBStructuredData &configuration), this
99   /// operation fails.
100   ///
101   /// \param[in] configuration
102   ///     Dictionary object with custom fields for the corresponding trace
103   ///     technology.
104   ///
105   ///     Full details for the trace start parameters that can be set can be
106   ///     retrieved by calling \a SBTrace::GetStartConfigurationHelp().
107   ///
108   /// \return
109   ///     An error explaining any failures.
110   SBError Start(const SBThread &thread, const SBStructuredData &configuration);
111 
112   /// Stop tracing all threads in a live process.
113   ///
114   /// If a "process tracing" operation is active, e.g. \a SBTrace::Start(const
115   /// SBStructuredData &configuration), this effectively prevents future threads
116   /// from being traced.
117   ///
118   /// This is equivalent to the command "process trace stop".
119   ///
120   /// \return
121   ///     An error explaining any failures.
122   SBError Stop();
123 
124   /// Stop tracing a specific thread in a live process regardless of whether the
125   /// thread was traced explicitly or as part of a "process tracing" operation.
126   ///
127   /// This is equivalent to the command "thread trace stop".
128   ///
129   /// \return
130   ///     An error explaining any failures.
131   SBError Stop(const SBThread &thread);
132 
133   explicit operator bool() const;
134 
135   bool IsValid();
136 
137 protected:
138   friend class SBTarget;
139 
140   SBTrace(const lldb::TraceSP &trace_sp);
141 
142   lldb::TraceSP m_opaque_sp;
143   /// deprecated
144   lldb::ProcessWP m_opaque_wp;
145 };
146 } // namespace lldb
147 
148 #endif // LLDB_API_SBTRACE_H
149