| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- //===-- SBThread.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_SBTHREAD_H
- #define LLDB_API_SBTHREAD_H
- #include "lldb/API/SBDefines.h"
- #include <cstdio>
- namespace lldb {
- class SBFrame;
- class LLDB_API SBThread {
- public:
- enum {
- eBroadcastBitStackChanged = (1 << 0),
- eBroadcastBitThreadSuspended = (1 << 1),
- eBroadcastBitThreadResumed = (1 << 2),
- eBroadcastBitSelectedFrameChanged = (1 << 3),
- eBroadcastBitThreadSelected = (1 << 4)
- };
- static const char *GetBroadcasterClassName();
- SBThread();
- SBThread(const lldb::SBThread &thread);
- SBThread(const lldb::ThreadSP &lldb_object_sp);
- ~SBThread();
- lldb::SBQueue GetQueue() const;
- explicit operator bool() const;
- bool IsValid() const;
- void Clear();
- lldb::StopReason GetStopReason();
- /// Get the number of words associated with the stop reason.
- /// See also GetStopReasonDataAtIndex().
- size_t GetStopReasonDataCount();
- /// Get information associated with a stop reason.
- ///
- /// Breakpoint stop reasons will have data that consists of pairs of
- /// breakpoint IDs followed by the breakpoint location IDs (they always come
- /// in pairs).
- ///
- /// Stop Reason Count Data Type
- /// ======================== ===== =========================================
- /// eStopReasonNone 0
- /// eStopReasonTrace 0
- /// eStopReasonBreakpoint N duple: {breakpoint id, location id}
- /// eStopReasonWatchpoint 1 watchpoint id
- /// eStopReasonSignal 1 unix signal number
- /// eStopReasonException N exception data
- /// eStopReasonExec 0
- /// eStopReasonFork 1 pid of the child process
- /// eStopReasonVFork 1 pid of the child process
- /// eStopReasonVForkDone 0
- /// eStopReasonPlanComplete 0
- uint64_t GetStopReasonDataAtIndex(uint32_t idx);
- bool GetStopReasonExtendedInfoAsJSON(lldb::SBStream &stream);
- SBThreadCollection
- GetStopReasonExtendedBacktraces(InstrumentationRuntimeType type);
- size_t GetStopDescription(char *dst, size_t dst_len);
- SBValue GetStopReturnValue();
- lldb::tid_t GetThreadID() const;
- uint32_t GetIndexID() const;
- const char *GetName() const;
- const char *GetQueueName() const;
- lldb::queue_id_t GetQueueID() const;
- bool GetInfoItemByPathAsString(const char *path, SBStream &strm);
- void StepOver(lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
- void StepOver(lldb::RunMode stop_other_threads, SBError &error);
- void StepInto(lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
- void StepInto(const char *target_name,
- lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
- void StepInto(const char *target_name, uint32_t end_line, SBError &error,
- lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
- void StepOut();
- void StepOut(SBError &error);
- void StepOutOfFrame(SBFrame &frame);
- void StepOutOfFrame(SBFrame &frame, SBError &error);
- void StepInstruction(bool step_over);
- void StepInstruction(bool step_over, SBError &error);
- SBError StepOverUntil(lldb::SBFrame &frame, lldb::SBFileSpec &file_spec,
- uint32_t line);
- SBError StepUsingScriptedThreadPlan(const char *script_class_name);
- SBError StepUsingScriptedThreadPlan(const char *script_class_name,
- bool resume_immediately);
- SBError StepUsingScriptedThreadPlan(const char *script_class_name,
- lldb::SBStructuredData &args_data,
- bool resume_immediately);
- SBError JumpToLine(lldb::SBFileSpec &file_spec, uint32_t line);
- void RunToAddress(lldb::addr_t addr);
- void RunToAddress(lldb::addr_t addr, SBError &error);
- SBError ReturnFromFrame(SBFrame &frame, SBValue &return_value);
- SBError UnwindInnermostExpression();
- /// LLDB currently supports process centric debugging which means when any
- /// thread in a process stops, all other threads are stopped. The Suspend()
- /// call here tells our process to suspend a thread and not let it run when
- /// the other threads in a process are allowed to run. So when
- /// SBProcess::Continue() is called, any threads that aren't suspended will
- /// be allowed to run. If any of the SBThread functions for stepping are
- /// called (StepOver, StepInto, StepOut, StepInstruction, RunToAddress), the
- /// thread will not be allowed to run and these functions will simply return.
- ///
- /// Eventually we plan to add support for thread centric debugging where
- /// each thread is controlled individually and each thread would broadcast
- /// its state, but we haven't implemented this yet.
- ///
- /// Likewise the SBThread::Resume() call will again allow the thread to run
- /// when the process is continued.
- ///
- /// Suspend() and Resume() functions are not currently reference counted, if
- /// anyone has the need for them to be reference counted, please let us
- /// know.
- bool Suspend();
- bool Suspend(SBError &error);
- bool Resume();
- bool Resume(SBError &error);
- bool IsSuspended();
- bool IsStopped();
- uint32_t GetNumFrames();
- lldb::SBFrame GetFrameAtIndex(uint32_t idx);
- lldb::SBFrame GetSelectedFrame();
- lldb::SBFrame SetSelectedFrame(uint32_t frame_idx);
- static bool EventIsThreadEvent(const SBEvent &event);
- static SBFrame GetStackFrameFromEvent(const SBEvent &event);
- static SBThread GetThreadFromEvent(const SBEvent &event);
- lldb::SBProcess GetProcess();
- const lldb::SBThread &operator=(const lldb::SBThread &rhs);
- bool operator==(const lldb::SBThread &rhs) const;
- bool operator!=(const lldb::SBThread &rhs) const;
- bool GetDescription(lldb::SBStream &description) const;
- bool GetDescription(lldb::SBStream &description, bool stop_format) const;
- bool GetStatus(lldb::SBStream &status) const;
- SBThread GetExtendedBacktraceThread(const char *type);
- uint32_t GetExtendedBacktraceOriginatingIndexID();
- SBValue GetCurrentException();
- SBThread GetCurrentExceptionBacktrace();
- bool SafeToCallFunctions();
- private:
- friend class SBBreakpoint;
- friend class SBBreakpointLocation;
- friend class SBBreakpointCallbackBaton;
- friend class SBExecutionContext;
- friend class SBFrame;
- friend class SBProcess;
- friend class SBDebugger;
- friend class SBValue;
- friend class lldb_private::QueueImpl;
- friend class SBQueueItem;
- friend class SBThreadPlan;
- void SetThread(const lldb::ThreadSP &lldb_object_sp);
- SBError ResumeNewPlan(lldb_private::ExecutionContext &exe_ctx,
- lldb_private::ThreadPlan *new_plan);
- lldb::ExecutionContextRefSP m_opaque_sp;
- lldb_private::Thread *operator->();
- lldb_private::Thread *get();
- };
- } // namespace lldb
- #endif // LLDB_API_SBTHREAD_H
|