StackFrameList.h revision 5c4b1607e8783a3d3f1f28fa66fcaa89ac246bd1
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- StackFrameList.h ----------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_StackFrameList_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_StackFrameList_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Host/Mutex.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/StackFrame.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass StackFrameList 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 30f40e30823926f27e3cb9364f3c8fe2e4be0c7658Greg Clayton StackFrameList (Thread &thread, 315205f0b6585a127acc6ed210021abb6091220a89Greg Clayton const lldb::StackFrameListSP &prev_frames_sp, 32f40e30823926f27e3cb9364f3c8fe2e4be0c7658Greg Clayton bool show_inline_frames); 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~StackFrameList(); 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 375205f0b6585a127acc6ed210021abb6091220a89Greg Clayton GetNumFrames (bool can_create = true); 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StackFrameSP 40782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton GetFrameAtIndex (uint32_t idx); 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4208d7d3ae16110aa68ed40c161eac8571aeb94cd9Greg Clayton lldb::StackFrameSP 4308d7d3ae16110aa68ed40c161eac8571aeb94cd9Greg Clayton GetFrameWithConcreteFrameIndex (uint32_t unwind_idx); 445c4b1607e8783a3d3f1f28fa66fcaa89ac246bd1Jim Ingham 455c4b1607e8783a3d3f1f28fa66fcaa89ac246bd1Jim Ingham lldb::StackFrameSP 465c4b1607e8783a3d3f1f28fa66fcaa89ac246bd1Jim Ingham GetFrameWithStackID (StackID &stack_id); 4708d7d3ae16110aa68ed40c161eac8571aeb94cd9Greg Clayton 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Mark a stack frame as the current frame 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 50c833295baeec641086f536e78050388af36784f8Jim Ingham SetSelectedFrame (lldb_private::StackFrame *frame); 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 53c833295baeec641086f536e78050388af36784f8Jim Ingham GetSelectedFrameIndex () const; 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Mark a stack frame as the current frame using the frame index 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 57c833295baeec641086f536e78050388af36784f8Jim Ingham SetSelectedFrameByIndex (uint32_t idx); 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Clear (); 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner InvalidateFrames (uint32_t start_idx); 641d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Clayton 651d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Clayton void 661d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Clayton Dump (Stream *s); 67ccd584dccb920cdb028de69950774c3bcdc025ecJim Ingham 68ccd584dccb920cdb028de69950774c3bcdc025ecJim Ingham lldb::StackFrameSP 69ccd584dccb920cdb028de69950774c3bcdc025ecJim Ingham GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr); 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 711d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Claytonprotected: 72782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton 735205f0b6585a127acc6ed210021abb6091220a89Greg Clayton friend class Thread; 745205f0b6585a127acc6ed210021abb6091220a89Greg Clayton 75782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton bool 761d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Clayton SetFrameAtIndex (uint32_t idx, lldb::StackFrameSP &frame_sp); 77782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton 785205f0b6585a127acc6ed210021abb6091220a89Greg Clayton static void 795205f0b6585a127acc6ed210021abb6091220a89Greg Clayton Merge (std::auto_ptr<StackFrameList>& curr_ap, 805205f0b6585a127acc6ed210021abb6091220a89Greg Clayton lldb::StackFrameListSP& prev_sp); 815205f0b6585a127acc6ed210021abb6091220a89Greg Clayton 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Classes that inherit from StackFrameList can see and modify these 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<lldb::StackFrameSP> collection; 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef collection::iterator iterator; 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef collection::const_iterator const_iterator; 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 89782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton Thread &m_thread; 905205f0b6585a127acc6ed210021abb6091220a89Greg Clayton lldb::StackFrameListSP m_prev_frames_sp; 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner mutable Mutex m_mutex; 921d66ef5d31a8326d5495f56b0cfbf2fd1bff67d8Greg Clayton collection m_frames; 93c833295baeec641086f536e78050388af36784f8Jim Ingham uint32_t m_selected_frame_idx; 94782b9ccd9f2b290585cd6bb4c1f0cc6cb7e22e15Greg Clayton bool m_show_inlined_frames; 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For StackFrameList only 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (StackFrameList); 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_StackFrameList_h_ 106