LLDB mainline
|
#include <StackFrameList.h>
Public Member Functions | |
StackFrameList (Thread &thread, const lldb::StackFrameListSP &prev_frames_sp, bool show_inline_frames) | |
~StackFrameList () | |
uint32_t | GetNumFrames (bool can_create=true) |
Get the number of visible frames. | |
lldb::StackFrameSP | GetFrameAtIndex (uint32_t idx) |
Get the frame at index idx . Invisible frames cannot be indexed. | |
lldb::StackFrameSP | GetFrameWithConcreteFrameIndex (uint32_t unwind_idx) |
Get the first concrete frame with index greater than or equal to idx . | |
lldb::StackFrameSP | GetFrameWithStackID (const StackID &stack_id) |
Retrieve the stack frame with the given ID stack_id . | |
uint32_t | SetSelectedFrame (lldb_private::StackFrame *frame) |
Mark a stack frame as the currently selected frame and return its index. | |
uint32_t | GetSelectedFrameIndex () const |
Get the currently selected frame index. | |
bool | SetSelectedFrameByIndex (uint32_t idx) |
Mark a stack frame as the currently selected frame using the frame index idx . | |
uint32_t | GetVisibleStackFrameIndex (uint32_t idx) |
If the current inline depth (i.e the number of invisible frames) is valid, subtract it from idx . | |
void | CalculateCurrentInlinedDepth () |
Calculate and set the current inline depth. | |
void | SetDefaultFileAndLineToSelectedFrame () |
If the currently selected frame comes from the currently selected thread, point the default file and line of the thread's target to the location specified by the frame. | |
void | Clear () |
Clear the cache of frames. | |
void | Dump (Stream *s) |
lldb::StackFrameSP | GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr) |
If stack_frame_ptr is contained in this StackFrameList, return its wrapping shared pointer. | |
size_t | GetStatus (Stream &strm, uint32_t first_frame, uint32_t num_frames, bool show_frame_info, uint32_t num_frames_with_source, bool show_unique=false, const char *frame_marker=nullptr) |
Protected Types | |
typedef std::vector< lldb::StackFrameSP > | collection |
typedef collection::iterator | iterator |
typedef collection::const_iterator | const_iterator |
Protected Member Functions | |
bool | SetFrameAtIndex (uint32_t idx, lldb::StackFrameSP &frame_sp) |
void | GetFramesUpTo (uint32_t end_idx) |
void | GetOnlyConcreteFramesUpTo (uint32_t end_idx, Unwind &unwinder) |
void | SynthesizeTailCallFrames (StackFrame &next_frame) |
Given that next_frame will be appended to the frame list, synthesize tail call frames between the current end of the list and next_frame . | |
bool | GetAllFramesFetched () |
void | SetAllFramesFetched () |
bool | DecrementCurrentInlinedDepth () |
void | ResetCurrentInlinedDepth () |
uint32_t | GetCurrentInlinedDepth () |
void | SetCurrentInlinedDepth (uint32_t new_depth) |
Protected Attributes | |
Thread & | m_thread |
The thread this frame list describes. | |
lldb::StackFrameListSP | m_prev_frames_sp |
The old stack frame list. | |
std::recursive_mutex | m_mutex |
A mutex for this frame list. | |
collection | m_frames |
A cache of frames. | |
uint32_t | m_selected_frame_idx |
The currently selected frame. | |
uint32_t | m_concrete_frames_fetched |
The number of concrete frames fetched while filling the frame list. | |
uint32_t | m_current_inlined_depth |
The number of synthetic function activations (invisible frames) expanded from the concrete frame #0 activation. | |
lldb::addr_t | m_current_inlined_pc |
The program counter value at the currently selected synthetic activation. | |
const bool | m_show_inlined_frames |
Whether or not to show synthetic (inline) frames. Immutable. | |
Private Member Functions | |
StackFrameList (const StackFrameList &)=delete | |
const StackFrameList & | operator= (const StackFrameList &)=delete |
Friends | |
class | Thread |
class | ScriptedThread |
Definition at line 22 of file StackFrameList.h.
|
protected |
Definition at line 113 of file StackFrameList.h.
|
protected |
Definition at line 115 of file StackFrameList.h.
|
protected |
Definition at line 114 of file StackFrameList.h.
StackFrameList::StackFrameList | ( | Thread & | thread, |
const lldb::StackFrameListSP & | prev_frames_sp, | ||
bool | show_inline_frames | ||
) |
Definition at line 37 of file StackFrameList.cpp.
References m_current_inlined_depth, and m_current_inlined_pc.
StackFrameList::~StackFrameList | ( | ) |
Definition at line 51 of file StackFrameList.cpp.
References Clear().
|
privatedelete |
void StackFrameList::CalculateCurrentInlinedDepth | ( | ) |
Calculate and set the current inline depth.
This may be used to update the StackFrameList's set of inline frames when execution stops, e.g when a breakpoint is hit.
Definition at line 57 of file StackFrameList.cpp.
References GetCurrentInlinedDepth(), ResetCurrentInlinedDepth(), and UINT32_MAX.
void StackFrameList::Clear | ( | ) |
Clear the cache of frames.
Definition at line 833 of file StackFrameList.cpp.
References m_concrete_frames_fetched, m_frames, and m_mutex.
Referenced by ~StackFrameList().
|
protected |
Definition at line 204 of file StackFrameList.cpp.
References GetCurrentInlinedDepth(), m_current_inlined_depth, m_show_inlined_frames, and UINT32_MAX.
void StackFrameList::Dump | ( | Stream * | s | ) |
Definition at line 637 of file StackFrameList.cpp.
References lldb_private::StackID::Dump(), lldb_private::StackFrame::DumpUsingSettingsFormat(), lldb_private::Stream::EOL(), lldb_private::StackFrame::GetStackID(), m_frames, m_mutex, and lldb_private::Stream::Printf().
Referenced by GetFramesUpTo().
|
inlineprotected |
Definition at line 101 of file StackFrameList.h.
References m_concrete_frames_fetched, and UINT32_MAX.
Referenced by GetFramesUpTo().
|
protected |
Definition at line 64 of file StackFrameList.cpp.
References lldb_private::GetLog(), lldb_private::Thread::GetRegisterContext(), lldb_private::Log::GetVerbose(), LLDB_INVALID_ADDRESS, LLDB_LOGF, m_current_inlined_depth, m_current_inlined_pc, m_show_inlined_frames, m_thread, lldb_private::Step, and UINT32_MAX.
Referenced by CalculateCurrentInlinedDepth(), DecrementCurrentInlinedDepth(), GetFrameAtIndex(), GetFramesUpTo(), and SetSelectedFrame().
StackFrameSP StackFrameList::GetFrameAtIndex | ( | uint32_t | idx | ) |
Get the frame at index idx
. Invisible frames cannot be indexed.
Definition at line 657 of file StackFrameList.cpp.
References lldb_private::Function::GetBlock(), GetCurrentInlinedDepth(), lldb_private::Unwind::GetFrameInfoAtIndex(), GetFramesUpTo(), lldb_private::Thread::GetUnwinder(), lldb_private::Thread::IsValid(), m_frames, m_mutex, m_show_inlined_frames, m_thread, pc, lldb_private::StackFrame::Regular, ResetCurrentInlinedDepth(), SetFrameAtIndex(), and UINT32_MAX.
Referenced by GetFrameWithConcreteFrameIndex(), GetFrameWithStackID(), GetStatus(), SetDefaultFileAndLineToSelectedFrame(), and SetSelectedFrameByIndex().
|
protected |
Definition at line 438 of file StackFrameList.cpp.
References lldb_private::LineEntry::ApplyFileMappings(), lldb_private::SymbolContext::block, lldb_private::Thread::CalculateTarget(), Dump(), lldb_private::Stream::EOL(), GetAllFramesFetched(), GetCurrentInlinedDepth(), lldb_private::Unwind::GetFrameInfoAtIndex(), lldb_private::GetLog(), GetOnlyConcreteFramesUpTo(), lldb_private::SymbolContext::GetParentOfInlinedScope(), lldb_private::Thread::GetProcess(), lldb_private::Thread::GetRegisterContext(), lldb_private::StackFrame::GetStackID(), lldb_private::Thread::GetUnwinder(), lldb_private::Host, lldb_private::Debugger::InterruptRequested(), lldb_private::Thread::IsValid(), lldb_private::SymbolContext::line_entry, LLDB_INVALID_ADDRESS, LLDB_LOG, m_concrete_frames_fetched, m_frames, m_prev_frames_sp, m_show_inlined_frames, m_thread, pc, lldb_private::Stream::Printf(), lldb_private::Stream::PutCString(), lldb_private::StackFrame::Regular, SetAllFramesFetched(), SynthesizeTailCallFrames(), UINT32_MAX, and lldb_private::StackFrame::UpdatePreviousFrameFromCurrentFrame().
Referenced by GetFrameAtIndex(), GetNumFrames(), and ResetCurrentInlinedDepth().
StackFrameSP StackFrameList::GetFrameWithConcreteFrameIndex | ( | uint32_t | unwind_idx | ) |
Get the first concrete frame with index greater than or equal to idx
.
Unlike GetFrameAtIndex, this cannot return a synthetic frame.
Definition at line 724 of file StackFrameList.cpp.
References GetFrameAtIndex().
StackFrameSP StackFrameList::GetFrameWithStackID | ( | const StackID & | stack_id | ) |
Retrieve the stack frame with the given ID stack_id
.
Definition at line 746 of file StackFrameList.cpp.
References CompareStackID(), GetFrameAtIndex(), lldb_private::StackID::IsValid(), m_frames, and m_mutex.
uint32_t StackFrameList::GetNumFrames | ( | bool | can_create = true | ) |
Get the number of visible frames.
Frames may be created if can_create
is true. Synthetic (inline) frames expanded from the concrete frame #0 (aka invisible frames) are not included in this count.
Definition at line 628 of file StackFrameList.cpp.
References GetFramesUpTo(), GetVisibleStackFrameIndex(), m_frames, m_mutex, and UINT32_MAX.
Definition at line 225 of file StackFrameList.cpp.
References lldb_private::Unwind::GetFramesUpTo(), lldb_private::Thread::IsValid(), m_concrete_frames_fetched, m_frames, m_thread, and UINT32_MAX.
Referenced by GetFramesUpTo().
uint32_t StackFrameList::GetSelectedFrameIndex | ( | ) | const |
Get the currently selected frame index.
Definition at line 784 of file StackFrameList.cpp.
References m_mutex, and m_selected_frame_idx.
Referenced by SetDefaultFileAndLineToSelectedFrame().
lldb::StackFrameSP StackFrameList::GetStackFrameSPForStackFramePtr | ( | StackFrame * | stack_frame_ptr | ) |
If stack_frame_ptr
is contained in this StackFrameList, return its wrapping shared pointer.
Definition at line 840 of file StackFrameList.cpp.
References m_frames.
size_t StackFrameList::GetStatus | ( | Stream & | strm, |
uint32_t | first_frame, | ||
uint32_t | num_frames, | ||
bool | show_frame_info, | ||
uint32_t | num_frames_with_source, | ||
bool | show_unique = false , |
||
const char * | frame_marker = nullptr |
||
) |
Definition at line 855 of file StackFrameList.cpp.
References GetFrameAtIndex(), lldb_private::Thread::GetSelectedFrame(), lldb_private::Stream::IndentLess(), m_thread, and UINT32_MAX.
If the current inline depth (i.e the number of invisible frames) is valid, subtract it from idx
.
Otherwise simply return idx
.
Definition at line 57 of file StackFrameList.h.
References m_current_inlined_depth, and UINT32_MAX.
Referenced by GetNumFrames().
|
privatedelete |
|
protected |
Definition at line 82 of file StackFrameList.cpp.
References lldb::eStopReasonBreakpoint, lldb::eStopReasonException, lldb::eStopReasonExec, lldb::eStopReasonFork, lldb::eStopReasonSignal, lldb::eStopReasonVFork, lldb::eStopReasonVForkDone, lldb::eStopReasonWatchpoint, lldb_private::AddressRange::GetBaseAddress(), GetFramesUpTo(), lldb_private::Block::GetInlinedParent(), lldb_private::GetLog(), lldb_private::Thread::GetProcess(), lldb_private::Block::GetRangeContainingAddress(), lldb_private::Thread::GetRegisterContext(), lldb_private::Thread::GetStopInfo(), lldb_private::Log::GetVerbose(), lldb_private::Breakpoint::IsInternal(), LLDB_INVALID_ADDRESS, LLDB_LOGF, m_current_inlined_depth, m_current_inlined_pc, m_frames, m_mutex, m_show_inlined_frames, m_thread, lldb_private::Address::SetLoadAddress(), lldb_private::Step, and UINT32_MAX.
Referenced by CalculateCurrentInlinedDepth(), and GetFrameAtIndex().
|
inlineprotected |
Definition at line 103 of file StackFrameList.h.
References m_concrete_frames_fetched, and UINT32_MAX.
Referenced by GetFramesUpTo().
|
protected |
Definition at line 217 of file StackFrameList.cpp.
References lldb_private::Thread::GetRegisterContext(), LLDB_INVALID_ADDRESS, m_current_inlined_depth, m_current_inlined_pc, m_thread, and UINT32_MAX.
void StackFrameList::SetDefaultFileAndLineToSelectedFrame | ( | ) |
If the currently selected frame comes from the currently selected thread, point the default file and line of the thread's target to the location specified by the frame.
Definition at line 818 of file StackFrameList.cpp.
References lldb_private::Thread::CalculateTarget(), lldb_private::LineEntry::file, GetFrameAtIndex(), lldb_private::UserID::GetID(), lldb_private::Thread::GetProcess(), GetSelectedFrameIndex(), lldb_private::LineEntry::line, lldb_private::SymbolContext::line_entry, and m_thread.
Referenced by SetSelectedFrame().
|
protected |
Definition at line 773 of file StackFrameList.cpp.
References m_frames.
Referenced by GetFrameAtIndex().
uint32_t StackFrameList::SetSelectedFrame | ( | lldb_private::StackFrame * | frame | ) |
Mark a stack frame as the currently selected frame and return its index.
Definition at line 789 of file StackFrameList.cpp.
References GetCurrentInlinedDepth(), m_frames, m_mutex, m_selected_frame_idx, SetDefaultFileAndLineToSelectedFrame(), and UINT32_MAX.
Referenced by SetSelectedFrameByIndex().
bool StackFrameList::SetSelectedFrameByIndex | ( | uint32_t | idx | ) |
Mark a stack frame as the currently selected frame using the frame index idx
.
Like GetFrameAtIndex, invisible frames cannot be selected.
Definition at line 808 of file StackFrameList.cpp.
References GetFrameAtIndex(), m_mutex, and SetSelectedFrame().
|
protected |
Given that next_frame
will be appended to the frame list, synthesize tail call frames between the current end of the list and next_frame
.
If any frames are added, adjust the frame index of next_frame
.
Definition at line 367 of file StackFrameList.cpp.
References lldb_private::StackFrame::Artificial, lldb_private::Function::CalculateSymbolContext(), lldb_private::StackFrame::CalculateTarget(), lldb_private::CallEdge::Call, FindInterveningFrames(), lldb_private::SymbolContext::function, lldb_private::StackFrame::GetConcreteFrameIndex(), lldb_private::Function::GetDisplayName(), lldb_private::GetLog(), lldb_private::StackFrame::GetRegisterContext(), lldb_private::StackFrame::GetSymbolContext(), LLDB_INVALID_ADDRESS, LLDB_LOG, m_frames, m_thread, pc, lldb_private::StackFrame::SetFrameIndex(), lldb_private::ExecutionContext::SetFramePtr(), and lldb_private::Step.
Referenced by GetFramesUpTo().
|
friend |
Definition at line 91 of file StackFrameList.h.
|
friend |
Definition at line 90 of file StackFrameList.h.
|
protected |
The number of concrete frames fetched while filling the frame list.
This is only used when synthetic frames are enabled.
Definition at line 142 of file StackFrameList.h.
Referenced by Clear(), GetAllFramesFetched(), GetFramesUpTo(), GetOnlyConcreteFramesUpTo(), and SetAllFramesFetched().
|
protected |
The number of synthetic function activations (invisible frames) expanded from the concrete frame #0 activation.
Definition at line 147 of file StackFrameList.h.
Referenced by DecrementCurrentInlinedDepth(), GetCurrentInlinedDepth(), GetVisibleStackFrameIndex(), ResetCurrentInlinedDepth(), SetCurrentInlinedDepth(), and StackFrameList().
|
protected |
The program counter value at the currently selected synthetic activation.
This is only valid if m_current_inlined_depth is valid.
Definition at line 152 of file StackFrameList.h.
Referenced by GetCurrentInlinedDepth(), ResetCurrentInlinedDepth(), SetCurrentInlinedDepth(), and StackFrameList().
|
protected |
A cache of frames.
This may need to be updated when the program counter changes.
Definition at line 135 of file StackFrameList.h.
Referenced by Clear(), Dump(), GetFrameAtIndex(), GetFramesUpTo(), GetFrameWithStackID(), GetNumFrames(), GetOnlyConcreteFramesUpTo(), GetStackFrameSPForStackFramePtr(), ResetCurrentInlinedDepth(), SetFrameAtIndex(), SetSelectedFrame(), and SynthesizeTailCallFrames().
|
mutableprotected |
A mutex for this frame list.
Definition at line 131 of file StackFrameList.h.
Referenced by Clear(), Dump(), GetFrameAtIndex(), GetFrameWithStackID(), GetNumFrames(), GetSelectedFrameIndex(), ResetCurrentInlinedDepth(), SetSelectedFrame(), and SetSelectedFrameByIndex().
|
protected |
The old stack frame list.
Definition at line 125 of file StackFrameList.h.
Referenced by GetFramesUpTo().
|
protected |
The currently selected frame.
Definition at line 138 of file StackFrameList.h.
Referenced by GetSelectedFrameIndex(), and SetSelectedFrame().
|
protected |
Whether or not to show synthetic (inline) frames. Immutable.
Definition at line 155 of file StackFrameList.h.
Referenced by DecrementCurrentInlinedDepth(), GetCurrentInlinedDepth(), GetFrameAtIndex(), GetFramesUpTo(), and ResetCurrentInlinedDepth().
|
protected |
The thread this frame list describes.
Definition at line 118 of file StackFrameList.h.
Referenced by GetCurrentInlinedDepth(), GetFrameAtIndex(), GetFramesUpTo(), GetOnlyConcreteFramesUpTo(), GetStatus(), ResetCurrentInlinedDepth(), SetCurrentInlinedDepth(), SetDefaultFileAndLineToSelectedFrame(), and SynthesizeTailCallFrames().