14using namespace process_linux;
28 return createStringError(
29 inconvertibleErrorCode(),
30 "Thread %" PRIu64
" can't be traced as the process trace size limit "
31 "has been reached. Consider retracing with a higher "
49Expected<std::optional<std::vector<uint8_t>>>
55Expected<std::unique_ptr<IntelPTPerThreadProcessTrace>>
57 ArrayRef<lldb::tid_t> current_tids) {
58 std::unique_ptr<IntelPTPerThreadProcessTrace> trace(
63 error = joinErrors(std::move(
error), trace->TraceStart(tid));
65 return std::move(
error);
66 return std::move(trace);
static llvm::raw_ostream & error(Stream &strm)
Manages a "process trace" instance by tracing each thread individually.
bool TracesThread(lldb::tid_t tid) const override
llvm::Error TraceStart(lldb::tid_t tid) override
Start tracing the thread given by its tid.
IntelPTThreadTraceCollection m_thread_traces
TraceIntelPTGetStateResponse GetState() override
Construct a minimal jLLDBTraceGetState response for this process trace.
TraceIntelPTStartRequest m_tracing_params
Params used to trace threads when the user started "process tracing".
llvm::Expected< std::optional< std::vector< uint8_t > > > TryGetBinaryData(const TraceGetBinaryDataRequest &request) override
llvm::Error TraceStop(lldb::tid_t tid) override
Stop tracing the thread given by its tid.
static llvm::Expected< std::unique_ptr< IntelPTPerThreadProcessTrace > > Start(const TraceIntelPTStartRequest &request, llvm::ArrayRef< lldb::tid_t > current_tids)
Start tracing the current process by tracing each of its tids individually.
This class wraps a single perf event collecting intel pt data in a single buffer.
size_t GetIptTraceSize() const
size_t GetTotalBufferSize() const
llvm::Error TraceStop(lldb::tid_t tid)
Stop tracing the thread given by its tid.
llvm::Error TraceStart(lldb::tid_t tid, const TraceIntelPTStartRequest &request)
Start tracing the thread given by its tid.
bool TracesThread(lldb::tid_t tid) const
llvm::Expected< std::optional< std::vector< uint8_t > > > TryGetBinaryData(const TraceGetBinaryDataRequest &request)
void ForEachThread(std::function< void(lldb::tid_t tid, IntelPTSingleBufferTrace &thread_trace)> callback)
Execute the provided callback on each thread that is being traced.
A class that represents a running process on the host machine.
static const char * kIptTrace
jLLDBTraceGetBinaryData gdb-remote packet
std::vector< TraceThreadState > traced_threads
jLLDBTraceStart gdb-remote packet
std::optional< uint64_t > process_buffer_size_limit
Required when doing "process tracing".
uint64_t ipt_trace_size
Size in bytes to use for each thread's trace buffer.