StackFrameList.h revision abe0fed36d83e1c37af9dae90c2d25db742b4515
1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//===-- StackFrameList.h ----------------------------------------*- C++ -*-===// 2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// 3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// The LLVM Compiler Infrastructure 4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// 5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// This file is distributed under the University of Illinois Open Source 6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// License. See LICENSE.TXT for details. 7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// 8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//===----------------------------------------------------------------------===// 9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#ifndef liblldb_StackFrameList_h_ 11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#define liblldb_StackFrameList_h_ 12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// C Includes 14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// C++ Includes 15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include <vector> 16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// Other libraries and framework includes 18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// Project includes 19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "lldb/Host/Mutex.h" 20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "lldb/Target/StackFrame.h" 21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogennamespace lldb_private { 23674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass StackFrameList 25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen{ 26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpublic: 27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen //------------------------------------------------------------------ 28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // Constructors and Destructors 29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen //------------------------------------------------------------------ 30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen StackFrameList (Thread &thread, 31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen const lldb::StackFrameListSP &prev_frames_sp, 32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen bool show_inline_frames); 33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen ~StackFrameList(); 35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen uint32_t 37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen GetNumFrames (bool can_create = true); 38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen lldb::StackFrameSP 40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen GetFrameAtIndex (uint32_t idx); 41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen lldb::StackFrameSP 43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen GetFrameWithConcreteFrameIndex (uint32_t unwind_idx); 44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen lldb::StackFrameSP 46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen GetFrameWithStackID (StackID &stack_id); 47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // Mark a stack frame as the current frame 49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen uint32_t 50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen SetSelectedFrame (lldb_private::StackFrame *frame); 51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen uint32_t 53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen GetSelectedFrameIndex () const; 54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // Mark a stack frame as the current frame using the frame index 56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void 57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen SetSelectedFrameByIndex (uint32_t idx); 58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void 60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Clear (); 61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void 63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen InvalidateFrames (uint32_t start_idx); 64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void 66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Dump (Stream *s); 67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen lldb::StackFrameSP 69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr); 70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen size_t 72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen GetStatus (Stream &strm, 73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen uint32_t first_frame, 74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen uint32_t num_frames, 75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen bool show_frame_info, 76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen uint32_t num_frames_with_source, 77674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 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