SBThread.h revision 74089e10cfbb4665da128f26d78c2b4006b5f1c6
125b3c049e70834cf33790a28643ab058b507b35cBen Cheng//===-- SBThread.h ----------------------------------------------*- C++ -*-===//
225b3c049e70834cf33790a28643ab058b507b35cBen Cheng//
325b3c049e70834cf33790a28643ab058b507b35cBen Cheng//                     The LLVM Compiler Infrastructure
425b3c049e70834cf33790a28643ab058b507b35cBen Cheng//
525b3c049e70834cf33790a28643ab058b507b35cBen Cheng// This file is distributed under the University of Illinois Open Source
625b3c049e70834cf33790a28643ab058b507b35cBen Cheng// License. See LICENSE.TXT for details.
725b3c049e70834cf33790a28643ab058b507b35cBen Cheng//
825b3c049e70834cf33790a28643ab058b507b35cBen Cheng//===----------------------------------------------------------------------===//
925b3c049e70834cf33790a28643ab058b507b35cBen Cheng
1025b3c049e70834cf33790a28643ab058b507b35cBen Cheng#ifndef LLDB_SBThread_h_
1125b3c049e70834cf33790a28643ab058b507b35cBen Cheng#define LLDB_SBThread_h_
1225b3c049e70834cf33790a28643ab058b507b35cBen Cheng
1325b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "lldb/API/SBDefines.h"
1425b3c049e70834cf33790a28643ab058b507b35cBen Cheng
1525b3c049e70834cf33790a28643ab058b507b35cBen Chengnamespace lldb {
1625b3c049e70834cf33790a28643ab058b507b35cBen Cheng
1725b3c049e70834cf33790a28643ab058b507b35cBen Chengclass SBFrame;
1825b3c049e70834cf33790a28643ab058b507b35cBen Cheng
1925b3c049e70834cf33790a28643ab058b507b35cBen Chengclass SBThread
2025b3c049e70834cf33790a28643ab058b507b35cBen Cheng{
2125b3c049e70834cf33790a28643ab058b507b35cBen Chengpublic:
2225b3c049e70834cf33790a28643ab058b507b35cBen Cheng    SBThread ();
2325b3c049e70834cf33790a28643ab058b507b35cBen Cheng
2425b3c049e70834cf33790a28643ab058b507b35cBen Cheng    SBThread (const lldb::SBThread &thread);
2525b3c049e70834cf33790a28643ab058b507b35cBen Cheng
2625b3c049e70834cf33790a28643ab058b507b35cBen Cheng   ~SBThread();
2725b3c049e70834cf33790a28643ab058b507b35cBen Cheng
2825b3c049e70834cf33790a28643ab058b507b35cBen Cheng    bool
2925b3c049e70834cf33790a28643ab058b507b35cBen Cheng    IsValid() const;
3025b3c049e70834cf33790a28643ab058b507b35cBen Cheng
3125b3c049e70834cf33790a28643ab058b507b35cBen Cheng    lldb::StopReason
3225b3c049e70834cf33790a28643ab058b507b35cBen Cheng    GetStopReason();
3325b3c049e70834cf33790a28643ab058b507b35cBen Cheng
3425b3c049e70834cf33790a28643ab058b507b35cBen Cheng    size_t
3525b3c049e70834cf33790a28643ab058b507b35cBen Cheng    GetStopDescription (char *dst, size_t dst_len);
3625b3c049e70834cf33790a28643ab058b507b35cBen Cheng
3725b3c049e70834cf33790a28643ab058b507b35cBen Cheng    lldb::tid_t
3825b3c049e70834cf33790a28643ab058b507b35cBen Cheng    GetThreadID () const;
3925b3c049e70834cf33790a28643ab058b507b35cBen Cheng
4025b3c049e70834cf33790a28643ab058b507b35cBen Cheng    uint32_t
4125b3c049e70834cf33790a28643ab058b507b35cBen Cheng    GetIndexID () const;
4225b3c049e70834cf33790a28643ab058b507b35cBen Cheng
4325b3c049e70834cf33790a28643ab058b507b35cBen Cheng    const char *
4425b3c049e70834cf33790a28643ab058b507b35cBen Cheng    GetName () const;
4525b3c049e70834cf33790a28643ab058b507b35cBen Cheng
4625b3c049e70834cf33790a28643ab058b507b35cBen Cheng    const char *
4725b3c049e70834cf33790a28643ab058b507b35cBen Cheng    GetQueueName() const;
4825b3c049e70834cf33790a28643ab058b507b35cBen Cheng
4925b3c049e70834cf33790a28643ab058b507b35cBen Cheng    void
5025b3c049e70834cf33790a28643ab058b507b35cBen Cheng    DisplayFramesForCurrentContext (FILE *out,
5125b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                    FILE *err,
5225b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                    uint32_t first_frame,
5325b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                    uint32_t num_frames,
5425b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                    bool show_frame_info,
5525b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                    uint32_t num_frames_with_source,
5625b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                    uint32_t source_lines_before = 3,
5725b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                    uint32_t source_lines_after = 3);
5825b3c049e70834cf33790a28643ab058b507b35cBen Cheng
5925b3c049e70834cf33790a28643ab058b507b35cBen Cheng    bool
6025b3c049e70834cf33790a28643ab058b507b35cBen Cheng    DisplaySingleFrameForCurrentContext (FILE *out,
6125b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                         FILE *err,
6225b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                         lldb::SBFrame &frame,
6325b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                         bool show_frame_info,
6425b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                         bool show_source,
6525b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                         uint32_t source_lines_after,
6625b3c049e70834cf33790a28643ab058b507b35cBen Cheng                                         uint32_t source_lines_before);
6725b3c049e70834cf33790a28643ab058b507b35cBen Cheng
6825b3c049e70834cf33790a28643ab058b507b35cBen Cheng    void
6925b3c049e70834cf33790a28643ab058b507b35cBen Cheng    StepOver (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
7025b3c049e70834cf33790a28643ab058b507b35cBen Cheng
7125b3c049e70834cf33790a28643ab058b507b35cBen Cheng    void
7225b3c049e70834cf33790a28643ab058b507b35cBen Cheng    StepInto (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
7325b3c049e70834cf33790a28643ab058b507b35cBen Cheng
7425b3c049e70834cf33790a28643ab058b507b35cBen Cheng    void
7525b3c049e70834cf33790a28643ab058b507b35cBen Cheng    StepOut ();
7625b3c049e70834cf33790a28643ab058b507b35cBen Cheng
7725b3c049e70834cf33790a28643ab058b507b35cBen Cheng    void
7825b3c049e70834cf33790a28643ab058b507b35cBen Cheng    StepInstruction(bool step_over);
7925b3c049e70834cf33790a28643ab058b507b35cBen Cheng
8025b3c049e70834cf33790a28643ab058b507b35cBen Cheng    void
8125b3c049e70834cf33790a28643ab058b507b35cBen Cheng    RunToAddress (lldb::addr_t addr);
8225b3c049e70834cf33790a28643ab058b507b35cBen Cheng
8325b3c049e70834cf33790a28643ab058b507b35cBen Cheng    void
8425b3c049e70834cf33790a28643ab058b507b35cBen Cheng    Backtrace (uint32_t num_frames = 0);
8525b3c049e70834cf33790a28643ab058b507b35cBen Cheng
8625b3c049e70834cf33790a28643ab058b507b35cBen Cheng    uint32_t
8725b3c049e70834cf33790a28643ab058b507b35cBen Cheng    GetNumFrames ();
8825b3c049e70834cf33790a28643ab058b507b35cBen Cheng
8925b3c049e70834cf33790a28643ab058b507b35cBen Cheng    lldb::SBFrame
9025b3c049e70834cf33790a28643ab058b507b35cBen Cheng    GetFrameAtIndex (uint32_t idx);
9125b3c049e70834cf33790a28643ab058b507b35cBen Cheng
9225b3c049e70834cf33790a28643ab058b507b35cBen Cheng    lldb::SBProcess
9325b3c049e70834cf33790a28643ab058b507b35cBen Cheng    GetProcess ();
9425b3c049e70834cf33790a28643ab058b507b35cBen Cheng
9525b3c049e70834cf33790a28643ab058b507b35cBen Cheng#ifndef SWIG
9625b3c049e70834cf33790a28643ab058b507b35cBen Cheng
9725b3c049e70834cf33790a28643ab058b507b35cBen Cheng    const lldb::SBThread &
9825b3c049e70834cf33790a28643ab058b507b35cBen Cheng    operator = (const lldb::SBThread &rhs);
9925b3c049e70834cf33790a28643ab058b507b35cBen Cheng
10025b3c049e70834cf33790a28643ab058b507b35cBen Cheng    bool
10125b3c049e70834cf33790a28643ab058b507b35cBen Cheng    operator == (const lldb::SBThread &rhs) const;
10225b3c049e70834cf33790a28643ab058b507b35cBen Cheng
10325b3c049e70834cf33790a28643ab058b507b35cBen Cheng    bool
10425b3c049e70834cf33790a28643ab058b507b35cBen Cheng    operator != (const lldb::SBThread &rhs) const;
10525b3c049e70834cf33790a28643ab058b507b35cBen Cheng
10625b3c049e70834cf33790a28643ab058b507b35cBen Cheng#endif
10725b3c049e70834cf33790a28643ab058b507b35cBen Cheng
10825b3c049e70834cf33790a28643ab058b507b35cBen Cheng
10925b3c049e70834cf33790a28643ab058b507b35cBen Chengprotected:
11025b3c049e70834cf33790a28643ab058b507b35cBen Cheng    friend class SBBreakpoint;
11125b3c049e70834cf33790a28643ab058b507b35cBen Cheng    friend class SBBreakpointLocation;
11225b3c049e70834cf33790a28643ab058b507b35cBen Cheng    friend class SBFrame;
11325b3c049e70834cf33790a28643ab058b507b35cBen Cheng    friend class SBProcess;
11425b3c049e70834cf33790a28643ab058b507b35cBen Cheng    friend class SBDebugger;
11525b3c049e70834cf33790a28643ab058b507b35cBen Cheng    friend class SBValue;
11625b3c049e70834cf33790a28643ab058b507b35cBen Cheng
11725b3c049e70834cf33790a28643ab058b507b35cBen Cheng    lldb_private::Thread *
11825b3c049e70834cf33790a28643ab058b507b35cBen Cheng    GetLLDBObjectPtr ();
11925b3c049e70834cf33790a28643ab058b507b35cBen Cheng
12025b3c049e70834cf33790a28643ab058b507b35cBen Cheng#ifndef SWIG
12125b3c049e70834cf33790a28643ab058b507b35cBen Cheng
12225b3c049e70834cf33790a28643ab058b507b35cBen Cheng    const lldb_private::Thread *
12325b3c049e70834cf33790a28643ab058b507b35cBen Cheng    operator->() const;
12425b3c049e70834cf33790a28643ab058b507b35cBen Cheng
12525b3c049e70834cf33790a28643ab058b507b35cBen Cheng    const lldb_private::Thread &
12625b3c049e70834cf33790a28643ab058b507b35cBen Cheng    operator*() const;
12725b3c049e70834cf33790a28643ab058b507b35cBen Cheng
12825b3c049e70834cf33790a28643ab058b507b35cBen Cheng
12925b3c049e70834cf33790a28643ab058b507b35cBen Cheng    lldb_private::Thread *
13025b3c049e70834cf33790a28643ab058b507b35cBen Cheng    operator->();
13125b3c049e70834cf33790a28643ab058b507b35cBen Cheng
13225b3c049e70834cf33790a28643ab058b507b35cBen Cheng    lldb_private::Thread &
13325b3c049e70834cf33790a28643ab058b507b35cBen Cheng    operator*();
13425b3c049e70834cf33790a28643ab058b507b35cBen Cheng
13525b3c049e70834cf33790a28643ab058b507b35cBen Cheng#endif
13625b3c049e70834cf33790a28643ab058b507b35cBen Cheng
13725b3c049e70834cf33790a28643ab058b507b35cBen Cheng    SBThread (const lldb::ThreadSP& lldb_object_sp);
13825b3c049e70834cf33790a28643ab058b507b35cBen Cheng
13925b3c049e70834cf33790a28643ab058b507b35cBen Cheng    void
14025b3c049e70834cf33790a28643ab058b507b35cBen Cheng    SetThread (const lldb::ThreadSP& lldb_object_sp);
14125b3c049e70834cf33790a28643ab058b507b35cBen Cheng
14225b3c049e70834cf33790a28643ab058b507b35cBen Chengprivate:
14325b3c049e70834cf33790a28643ab058b507b35cBen Cheng    //------------------------------------------------------------------
14425b3c049e70834cf33790a28643ab058b507b35cBen Cheng    // Classes that inherit from Thread can see and modify these
14525b3c049e70834cf33790a28643ab058b507b35cBen Cheng    //------------------------------------------------------------------
14625b3c049e70834cf33790a28643ab058b507b35cBen Cheng
14725b3c049e70834cf33790a28643ab058b507b35cBen Cheng    lldb::ThreadSP m_lldb_object_sp;
14825b3c049e70834cf33790a28643ab058b507b35cBen Cheng};
14925b3c049e70834cf33790a28643ab058b507b35cBen Cheng
15025b3c049e70834cf33790a28643ab058b507b35cBen Cheng} // namespace lldb
15125b3c049e70834cf33790a28643ab058b507b35cBen Cheng
15225b3c049e70834cf33790a28643ab058b507b35cBen Cheng#endif  // LLDB_SBThread_h_
15325b3c049e70834cf33790a28643ab058b507b35cBen Cheng