SBThread.h revision 269024
1//===-- SBThread.h ----------------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLDB_SBThread_h_
11#define LLDB_SBThread_h_
12
13#include "lldb/API/SBDefines.h"
14
15#include <stdio.h>
16
17namespace lldb {
18
19class SBFrame;
20
21class SBThread
22{
23public:
24    enum
25    {
26        eBroadcastBitStackChanged           = (1 << 0),
27        eBroadcastBitThreadSuspended        = (1 << 1),
28        eBroadcastBitThreadResumed          = (1 << 2),
29        eBroadcastBitSelectedFrameChanged   = (1 << 3),
30        eBroadcastBitThreadSelected         = (1 << 4)
31    };
32
33    static const char *
34    GetBroadcasterClassName ();
35
36    SBThread ();
37
38    SBThread (const lldb::SBThread &thread);
39
40    SBThread (const lldb::ThreadSP& lldb_object_sp);
41
42   ~SBThread();
43
44    bool
45    IsValid() const;
46
47    void
48    Clear ();
49
50    lldb::StopReason
51    GetStopReason();
52
53    /// Get the number of words associated with the stop reason.
54    /// See also GetStopReasonDataAtIndex().
55    size_t
56    GetStopReasonDataCount();
57
58    //--------------------------------------------------------------------------
59    /// Get information associated with a stop reason.
60    ///
61    /// Breakpoint stop reasons will have data that consists of pairs of
62    /// breakpoint IDs followed by the breakpoint location IDs (they always come
63    /// in pairs).
64    ///
65    /// Stop Reason              Count Data Type
66    /// ======================== ===== =========================================
67    /// eStopReasonNone          0
68    /// eStopReasonTrace         0
69    /// eStopReasonBreakpoint    N     duple: {breakpoint id, location id}
70    /// eStopReasonWatchpoint    1     watchpoint id
71    /// eStopReasonSignal        1     unix signal number
72    /// eStopReasonException     N     exception data
73    /// eStopReasonExec          0
74    /// eStopReasonPlanComplete  0
75    //--------------------------------------------------------------------------
76    uint64_t
77    GetStopReasonDataAtIndex(uint32_t idx);
78
79    size_t
80    GetStopDescription (char *dst, size_t dst_len);
81
82    SBValue
83    GetStopReturnValue ();
84
85    lldb::tid_t
86    GetThreadID () const;
87
88    uint32_t
89    GetIndexID () const;
90
91    const char *
92    GetName () const;
93
94    const char *
95    GetQueueName() const;
96
97    lldb::queue_id_t
98    GetQueueID() const;
99
100    void
101    StepOver (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
102
103    void
104    StepInto (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
105
106    void
107    StepInto (const char *target_name, lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
108
109    void
110    StepOut ();
111
112    void
113    StepOutOfFrame (lldb::SBFrame &frame);
114
115    void
116    StepInstruction(bool step_over);
117
118    SBError
119    StepOverUntil (lldb::SBFrame &frame,
120                   lldb::SBFileSpec &file_spec,
121                   uint32_t line);
122
123    SBError
124    JumpToLine (lldb::SBFileSpec &file_spec, uint32_t line);
125
126    void
127    RunToAddress (lldb::addr_t addr);
128
129    SBError
130    ReturnFromFrame (SBFrame &frame, SBValue &return_value);
131
132    //--------------------------------------------------------------------------
133    /// LLDB currently supports process centric debugging which means when any
134    /// thread in a process stops, all other threads are stopped. The Suspend()
135    /// call here tells our process to suspend a thread and not let it run when
136    /// the other threads in a process are allowed to run. So when
137    /// SBProcess::Continue() is called, any threads that aren't suspended will
138    /// be allowed to run. If any of the SBThread functions for stepping are
139    /// called (StepOver, StepInto, StepOut, StepInstruction, RunToAddres), the
140    /// thread will not be allowed to run and these funtions will simply return.
141    ///
142    /// Eventually we plan to add support for thread centric debugging where
143    /// each thread is controlled individually and each thread would broadcast
144    /// its state, but we haven't implemented this yet.
145    ///
146    /// Likewise the SBThread::Resume() call will again allow the thread to run
147    /// when the process is continued.
148    ///
149    /// Suspend() and Resume() functions are not currently reference counted, if
150    /// anyone has the need for them to be reference counted, please let us
151    /// know.
152    //--------------------------------------------------------------------------
153    bool
154    Suspend();
155
156    bool
157    Resume ();
158
159    bool
160    IsSuspended();
161
162    bool
163    IsStopped();
164
165    uint32_t
166    GetNumFrames ();
167
168    lldb::SBFrame
169    GetFrameAtIndex (uint32_t idx);
170
171    lldb::SBFrame
172    GetSelectedFrame ();
173
174    lldb::SBFrame
175    SetSelectedFrame (uint32_t frame_idx);
176
177    static bool
178    EventIsThreadEvent (const SBEvent &event);
179
180    static SBFrame
181    GetStackFrameFromEvent (const SBEvent &event);
182
183    static SBThread
184    GetThreadFromEvent (const SBEvent &event);
185
186    lldb::SBProcess
187    GetProcess ();
188
189    const lldb::SBThread &
190    operator = (const lldb::SBThread &rhs);
191
192    bool
193    operator == (const lldb::SBThread &rhs) const;
194
195    bool
196    operator != (const lldb::SBThread &rhs) const;
197
198    bool
199    GetDescription (lldb::SBStream &description) const;
200
201    bool
202    GetStatus (lldb::SBStream &status) const;
203
204    SBThread
205    GetExtendedBacktraceThread (const char *type);
206
207    uint32_t
208    GetExtendedBacktraceOriginatingIndexID ();
209
210protected:
211    friend class SBBreakpoint;
212    friend class SBBreakpointLocation;
213    friend class SBFrame;
214    friend class SBProcess;
215    friend class SBDebugger;
216    friend class SBValue;
217    friend class lldb_private::QueueImpl;
218    friend class SBQueueItem;
219
220    void
221    SetThread (const lldb::ThreadSP& lldb_object_sp);
222
223#ifndef SWIG
224    SBError
225    ResumeNewPlan (lldb_private::ExecutionContext &exe_ctx, lldb_private::ThreadPlan *new_plan);
226#endif
227
228private:
229    lldb::ExecutionContextRefSP m_opaque_sp;
230};
231
232} // namespace lldb
233
234#endif  // LLDB_SBThread_h_
235