//===-- SBTrace.h -----------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_API_SBTRACE_H #define LLDB_API_SBTRACE_H #include "lldb/API/SBDefines.h" #include "lldb/API/SBError.h" #include "lldb/API/SBTraceCursor.h" namespace lldb { class LLDB_API SBTrace { public: /// Default constructor for an invalid Trace object. SBTrace(); /// See SBDebugger::LoadTraceFromFile. static SBTrace LoadTraceFromFile(SBError &error, SBDebugger &debugger, const SBFileSpec &trace_description_file); /// Get a \a TraceCursor for the given thread's trace. /// /// \param[out] error /// This will be set with an error in case of failures. // /// \param[in] thread /// The thread to get a \a TraceCursor for. // /// \return /// A \a SBTraceCursor. If the thread is not traced or its trace /// information failed to load, an invalid \a SBTraceCursor is returned /// and the \p error parameter is set. SBTraceCursor CreateNewCursor(SBError &error, SBThread &thread); /// Save the trace to the specified directory, which will be created if /// needed. This will also create a file \a /trace.json with the /// main properties of the trace session, along with others files which /// contain the actual trace data. The trace.json file can be used later as /// input for the "trace load" command to load the trace in LLDB, or for the /// method \a SBDebugger.LoadTraceFromFile(). /// /// \param[out] error /// This will be set with an error in case of failures. /// /// \param[in] bundle_dir /// The directory where the trace files will be saved. /// /// \param[in] compact /// Try not to save to disk information irrelevant to the traced processes. /// Each trace plug-in implements this in a different fashion. /// /// \return /// A \a SBFileSpec pointing to the bundle description file. SBFileSpec SaveToDisk(SBError &error, const SBFileSpec &bundle_dir, bool compact = false); /// \return /// A description of the parameters to use for the \a SBTrace::Start /// method, or \b null if the object is invalid. const char *GetStartConfigurationHelp(); /// Start tracing all current and future threads in a live process using a /// provided configuration. This is referred as "process tracing" in the /// documentation. /// /// This is equivalent to the command "process trace start". /// /// This operation fails if it is invoked twice in a row without /// first stopping the process trace with \a SBTrace::Stop(). /// /// If a thread is already being traced explicitly, e.g. with \a /// SBTrace::Start(const SBThread &thread, const SBStructuredData /// &configuration), it is left unaffected by this operation. /// /// \param[in] configuration /// Dictionary object with custom fields for the corresponding trace /// technology. /// /// Full details for the trace start parameters that can be set can be /// retrieved by calling \a SBTrace::GetStartConfigurationHelp(). /// /// \return /// An error explaining any failures. SBError Start(const SBStructuredData &configuration); /// Start tracing a specific thread in a live process using a provided /// configuration. This is referred as "thread tracing" in the documentation. /// /// This is equivalent to the command "thread trace start". /// /// If the thread is already being traced by a "process tracing" operation, /// e.g. with \a SBTrace::Start(const SBStructuredData &configuration), this /// operation fails. /// /// \param[in] configuration /// Dictionary object with custom fields for the corresponding trace /// technology. /// /// Full details for the trace start parameters that can be set can be /// retrieved by calling \a SBTrace::GetStartConfigurationHelp(). /// /// \return /// An error explaining any failures. SBError Start(const SBThread &thread, const SBStructuredData &configuration); /// Stop tracing all threads in a live process. /// /// If a "process tracing" operation is active, e.g. \a SBTrace::Start(const /// SBStructuredData &configuration), this effectively prevents future threads /// from being traced. /// /// This is equivalent to the command "process trace stop". /// /// \return /// An error explaining any failures. SBError Stop(); /// Stop tracing a specific thread in a live process regardless of whether the /// thread was traced explicitly or as part of a "process tracing" operation. /// /// This is equivalent to the command "thread trace stop". /// /// \return /// An error explaining any failures. SBError Stop(const SBThread &thread); explicit operator bool() const; bool IsValid(); protected: friend class SBTarget; SBTrace(const lldb::TraceSP &trace_sp); lldb::TraceSP m_opaque_sp; /// deprecated lldb::ProcessWP m_opaque_wp; }; } // namespace lldb #endif // LLDB_API_SBTRACE_H