blob: 1685caaf4efa375f0092b7bc2b13d2c2bd44e17f [file] [log] [blame]
//===-- 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:
/// Default constructor for an invalid Trace object.
SBTrace();
SBTrace(const lldb::TraceSP &trace_sp);
/// \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:
lldb::TraceSP m_opaque_sp;
/// deprecated
lldb::ProcessWP m_opaque_wp;
};
} // namespace lldb
#endif // LLDB_API_SBTRACE_H