StackFrameList.h revision a7d3dc75ec4f46033c3f991f11fb58a058091a85
1//===-- StackFrameList.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 liblldb_StackFrameList_h_
11#define liblldb_StackFrameList_h_
12
13// C Includes
14// C++ Includes
15#include <vector>
16
17// Other libraries and framework includes
18// Project includes
19#include "lldb/Host/Mutex.h"
20#include "lldb/Target/StackFrame.h"
21
22namespace lldb_private {
23
24class StackFrameList
25{
26public:
27    //------------------------------------------------------------------
28    // Constructors and Destructors
29    //------------------------------------------------------------------
30    StackFrameList (Thread &thread,
31                    const lldb::StackFrameListSP &prev_frames_sp,
32                    bool show_inline_frames);
33
34    ~StackFrameList();
35
36    uint32_t
37    GetNumFrames (bool can_create = true);
38
39    lldb::StackFrameSP
40    GetFrameAtIndex (uint32_t idx);
41
42    lldb::StackFrameSP
43    GetFrameWithConcreteFrameIndex (uint32_t unwind_idx);
44
45    lldb::StackFrameSP
46    GetFrameWithStackID (const StackID &stack_id);
47
48    // Mark a stack frame as the current frame
49    uint32_t
50    SetSelectedFrame (lldb_private::StackFrame *frame);
51
52    uint32_t
53    GetSelectedFrameIndex () const;
54
55    // Mark a stack frame as the current frame using the frame index
56    bool
57    SetSelectedFrameByIndex (uint32_t idx);
58
59    void
60    SetDefaultFileAndLineToSelectedFrame();
61
62    void
63    Clear ();
64
65    void
66    InvalidateFrames (uint32_t start_idx);
67
68    void
69    Dump (Stream *s);
70
71    lldb::StackFrameSP
72    GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr);
73
74    size_t
75    GetStatus (Stream &strm,
76               uint32_t first_frame,
77               uint32_t num_frames,
78               bool show_frame_info,
79               uint32_t num_frames_with_source);
80
81protected:
82
83    friend class Thread;
84
85    bool
86    SetFrameAtIndex (uint32_t idx, lldb::StackFrameSP &frame_sp);
87
88    static void
89    Merge (std::auto_ptr<StackFrameList>& curr_ap,
90           lldb::StackFrameListSP& prev_sp);
91
92    void
93    GetFramesUpTo (uint32_t end_idx);
94
95    bool
96    GetAllFramesFetched()
97    {
98        return m_concrete_frames_fetched == UINT32_MAX;
99    }
100
101    void
102    SetAllFramesFetched ()
103    {
104        m_concrete_frames_fetched = UINT32_MAX;
105    }
106
107    //------------------------------------------------------------------
108    // Classes that inherit from StackFrameList can see and modify these
109    //------------------------------------------------------------------
110    typedef std::vector<lldb::StackFrameSP> collection;
111    typedef collection::iterator iterator;
112    typedef collection::const_iterator const_iterator;
113
114    Thread &m_thread;
115    lldb::StackFrameListSP m_prev_frames_sp;
116    mutable Mutex m_mutex;
117    collection m_frames;
118    uint32_t m_selected_frame_idx;
119    uint32_t m_concrete_frames_fetched;
120    bool m_show_inlined_frames;
121
122private:
123    //------------------------------------------------------------------
124    // For StackFrameList only
125    //------------------------------------------------------------------
126    DISALLOW_COPY_AND_ASSIGN (StackFrameList);
127};
128
129} // namespace lldb_private
130
131#endif  // liblldb_StackFrameList_h_
132