StackFrameList.h revision abe0fed36d83e1c37af9dae90c2d25db742b4515
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 (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 void 57 SetSelectedFrameByIndex (uint32_t idx); 58 59 void 60 Clear (); 61 62 void 63 InvalidateFrames (uint32_t start_idx); 64 65 void 66 Dump (Stream *s); 67 68 lldb::StackFrameSP 69 GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr); 70 71 size_t 72 GetStatus (Stream &strm, 73 uint32_t first_frame, 74 uint32_t num_frames, 75 bool show_frame_info, 76 uint32_t num_frames_with_source, 77 uint32_t source_lines_before, 78 uint32_t source_lines_after); 79 80protected: 81 82 friend class Thread; 83 84 bool 85 SetFrameAtIndex (uint32_t idx, lldb::StackFrameSP &frame_sp); 86 87 static void 88 Merge (std::auto_ptr<StackFrameList>& curr_ap, 89 lldb::StackFrameListSP& prev_sp); 90 91 //------------------------------------------------------------------ 92 // Classes that inherit from StackFrameList can see and modify these 93 //------------------------------------------------------------------ 94 typedef std::vector<lldb::StackFrameSP> collection; 95 typedef collection::iterator iterator; 96 typedef collection::const_iterator const_iterator; 97 98 Thread &m_thread; 99 lldb::StackFrameListSP m_prev_frames_sp; 100 mutable Mutex m_mutex; 101 collection m_frames; 102 uint32_t m_selected_frame_idx; 103 bool m_show_inlined_frames; 104 105private: 106 //------------------------------------------------------------------ 107 // For StackFrameList only 108 //------------------------------------------------------------------ 109 DISALLOW_COPY_AND_ASSIGN (StackFrameList); 110}; 111 112} // namespace lldb_private 113 114#endif // liblldb_StackFrameList_h_ 115