StackFrameList.h revision 5c4b1607e8783a3d3f1f28fa66fcaa89ac246bd1
10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//===-- StackFrameList.h ----------------------------------------*- C++ -*-===// 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// The LLVM Compiler Infrastructure 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// This file is distributed under the University of Illinois Open Source 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// License. See LICENSE.TXT for details. 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//===----------------------------------------------------------------------===// 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef liblldb_StackFrameList_h_ 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define liblldb_StackFrameList_h_ 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// C Includes 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// C++ Includes 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector> 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Other libraries and framework includes 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Project includes 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "lldb/Host/Mutex.h" 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "lldb/Target/StackFrame.h" 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace lldb_private { 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass StackFrameList 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org{ 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgpublic: 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org //------------------------------------------------------------------ 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Constructors and Destructors 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org //------------------------------------------------------------------ 3013b2d035e2e7f2f18e3a4d3377bc1a09f43a4ff9buildbot@webrtc.org StackFrameList (Thread &thread, 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const lldb::StackFrameListSP &prev_frames_sp, 32cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org bool show_inline_frames); 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~StackFrameList(); 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32_t 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetNumFrames (bool can_create = true); 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org lldb::StackFrameSP 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetFrameAtIndex (uint32_t idx); 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org lldb::StackFrameSP 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetFrameWithConcreteFrameIndex (uint32_t unwind_idx); 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org lldb::StackFrameSP 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetFrameWithStackID (StackID &stack_id); 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Mark a stack frame as the current frame 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32_t 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetSelectedFrame (lldb_private::StackFrame *frame); 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32_t 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetSelectedFrameIndex () const; 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Mark a stack frame as the current frame using the frame index 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetSelectedFrameByIndex (uint32_t idx); 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Clear (); 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org InvalidateFrames (uint32_t start_idx); 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Dump (Stream *s); 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org lldb::StackFrameSP 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr); 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgprotected: 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org friend class Thread; 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetFrameAtIndex (uint32_t idx, lldb::StackFrameSP &frame_sp); 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static void 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Merge (std::auto_ptr<StackFrameList>& curr_ap, 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org lldb::StackFrameListSP& prev_sp); 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org //------------------------------------------------------------------ 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Classes that inherit from StackFrameList can see and modify these 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org //------------------------------------------------------------------ 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef std::vector<lldb::StackFrameSP> collection; 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef collection::iterator iterator; 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef collection::const_iterator const_iterator; 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Thread &m_thread; 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org lldb::StackFrameListSP m_prev_frames_sp; 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org mutable Mutex m_mutex; 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org collection m_frames; 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32_t m_selected_frame_idx; 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool m_show_inlined_frames; 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgprivate: 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org //------------------------------------------------------------------ 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // For StackFrameList only 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org //------------------------------------------------------------------ 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DISALLOW_COPY_AND_ASSIGN (StackFrameList); 1012a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org}; 1022a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace lldb_private 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // liblldb_StackFrameList_h_ 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org