//===-- 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" class TraceImpl; namespace lldb { class LLDB_API SBTrace { public: SBTrace(); /// Obtain the trace data as raw bytes. /// /// \param[out] error /// An error explaining what went wrong. /// /// \param[in] buf /// Buffer to write the trace data to. /// /// \param[in] size /// The size of the buffer used to read the data. This is /// also the size of the data intended to read. It is also /// possible to partially read the trace data for some trace /// technologies by specifying a smaller buffer. /// /// \param[in] offset /// The start offset to begin reading the trace data. /// /// \param[in] thread_id /// Tracing could be started for the complete process or a /// single thread, in the first case the traceid obtained would /// map to all the threads existing within the process and the /// ones spawning later. The thread_id parameter can be used in /// such a scenario to select the trace data for a specific /// thread. /// /// \return /// The size of the trace data effectively read by the API call. size_t GetTraceData(SBError &error, void *buf, size_t size, size_t offset = 0, lldb::tid_t thread_id = LLDB_INVALID_THREAD_ID); /// Obtain any meta data as raw bytes for the tracing instance. /// The input parameter definition is similar to the previous /// function. size_t GetMetaData(SBError &error, void *buf, size_t size, size_t offset = 0, lldb::tid_t thread_id = LLDB_INVALID_THREAD_ID); /// Stop the tracing instance. Stopping the trace will also /// lead to deletion of any gathered trace data. /// /// \param[out] error /// An error explaining what went wrong. /// /// \param[in] thread_id /// The trace id could map to a tracing instance for a thread /// or could also map to a group of threads being traced with /// the same trace options. A thread_id is normally optional /// except in the case of tracing a complete process and tracing /// needs to switched off on a particular thread. /// A situation could occur where initially a thread (lets say /// thread A) is being individually traced with a particular /// trace id and then tracing is started on the complete /// process, in this case thread A will continue without any /// change. All newly spawned threads would be traced with the /// trace id of the process. /// Now if the StopTrace API is called for the whole process, /// thread A will not be stopped and must be stopped separately. void StopTrace(SBError &error, lldb::tid_t thread_id = LLDB_INVALID_THREAD_ID); /// Get the trace configuration being used for the trace instance. /// The threadid in the SBTraceOptions needs to be set when the /// configuration used by a specific thread is being requested. /// /// \param[out] options /// The trace options actually used by the trace instance /// would be filled by the API. /// /// \param[out] error /// An error explaining what went wrong. void GetTraceConfig(SBTraceOptions &options, SBError &error); lldb::user_id_t GetTraceUID(); explicit operator bool() const; bool IsValid(); protected: typedef std::shared_ptr TraceImplSP; friend class SBProcess; void SetTraceUID(lldb::user_id_t uid); TraceImplSP m_trace_impl_sp; lldb::ProcessSP GetSP() const; void SetSP(const ProcessSP &process_sp); lldb::ProcessWP m_opaque_wp; }; } // namespace lldb #endif // LLDB_API_SBTRACE_H