12#include "lldb/Host/Config.h"
41#pragma mark CommandObjectFrameDiagnose
47#define LLDB_OPTIONS_frame_diag
48#include "CommandOptions.inc"
62 switch (short_option) {
69 if (option_arg.getAsInteger(0, *
address)) {
72 "invalid address argument '%s'", option_arg.str().c_str());
78 if (option_arg.getAsInteger(0, *
offset)) {
81 "invalid offset argument '%s'", option_arg.str().c_str());
86 llvm_unreachable(
"Unimplemented option");
99 return llvm::ArrayRef(g_frame_diag_options);
104 std::optional<ConstString>
reg;
110 "Try to determine what path the current stop "
111 "location used to get to a register or address",
113 eCommandRequiresThread | eCommandTryTargetAPILock |
114 eCommandProcessMustBeLaunched |
115 eCommandProcessMustBePaused) {
133 "`frame diagnose --address` is incompatible with other arguments.");
138 valobj_sp = frame_sp->GuessValueForRegisterAndOffset(
143 result.
AppendError(
"No arguments provided, and no stop info.");
160 GetExpressionPathFormat::eGetExpressionPathFormatHonorPointers;
161 valobj_sp->GetExpressionPath(stream, format);
162 stream.PutCString(
" =");
170 assert(valobj_sp.get() &&
"Must have a valid ValueObject to print");
179#pragma mark CommandObjectFrameInfo
187 "List information about the current "
188 "stack frame in the current thread.",
190 eCommandRequiresFrame | eCommandTryTargetAPILock |
191 eCommandProcessMustBeLaunched |
192 eCommandProcessMustBePaused) {}
203#pragma mark CommandObjectFrameSelect
207#define LLDB_OPTIONS_frame_select
208#include "CommandOptions.inc"
222 switch (short_option) {
225 if (option_arg.getAsInteger(0, offset) || offset == INT32_MIN) {
227 "invalid frame offset argument '%s'", option_arg.str().c_str());
234 llvm_unreachable(
"Unimplemented option");
245 return llvm::ArrayRef(g_frame_select_options);
253 "Select the current stack frame by "
254 "index from within the current thread "
255 "(see 'thread backtrace'.)",
257 eCommandRequiresThread | eCommandTryTargetAPILock |
258 eCommandProcessMustBeLaunched |
259 eCommandProcessMustBePaused) {
283 uint32_t candidate_idx = frame_idx;
284 const unsigned max_depth = 12;
285 for (
unsigned num_try = 0; num_try < max_depth; ++num_try) {
292 if (candidate_sp->IsHidden())
305 if (
static_cast<int32_t
>(frame_idx) >=
309 if (frame_idx == 0) {
312 result.
AppendError(
"Already at the bottom of the stack.");
322 const uint32_t frame_requested = frame_idx
326 frame_idx = frame_requested;
330 if (
static_cast<int32_t
>(num_frames - frame_idx) >
334 if (frame_idx == num_frames - 1) {
337 result.
AppendError(
"Already at the top of the stack.");
340 frame_idx = num_frames - 1;
347 "too many arguments; expected frame-index, saw '%s'.\n",
356 if (command[0].ref().getAsInteger(0, frame_idx)) {
383#pragma mark CommandObjectFrameVariable
389 interpreter,
"frame variable",
390 "Show variables for the current stack frame. Defaults to all "
391 "arguments and local variables in scope. Names of argument, "
392 "local, file static and file global variables can be specified.",
394 eCommandRequiresFrame | eCommandTryTargetAPILock |
395 eCommandProcessMustBeLaunched | eCommandProcessMustBePaused |
396 eCommandRequiresProcess),
401Children of aggregate variables can be specified such as 'var->child.x'. In
402'frame variable', the operators -> and [] do not invoke operator overloads if
403they exist, but directly access the specified element. If you want to trigger
404operator overloads use the expression command to print the variable instead.
406It is worth noting that except for overloaded operators, when printing local
407variables 'expr local_var' and 'frame var local_var' produce the same results.
408However, 'frame variable' is more efficient, since it uses debug information and
409memory reads directly, rather than parsing and evaluating an expression, which
410may even involve JITing and running code in the target program.)");
430 return llvm::StringRef();
432 switch (var_sp->GetScope()) {
447 return llvm::StringRef();
469 llvm_unreachable(
"Unexpected scope value");
478 std::optional<llvm::ArrayRef<VariableSP>>
482 bool any_matches =
false;
483 const size_t previous_num_vars = matches.
GetSize();
493 return matches.
toArrayRef().drop_front(previous_num_vars);
516 if (
error.Fail() && (!variable_list || variable_list->
GetSize() == 0)) {
528 summary_format_sp = std::make_shared<StringSummaryFormat>(
545 if (!command.
empty()) {
550 for (
auto &entry : command) {
552 llvm::StringRef name_str = entry.ref();
555 std::optional<llvm::ArrayRef<VariableSP>> results =
559 "no variables matched the regular expression '%s'.",
567 std::string scope_string;
571 if (!scope_string.empty())
575 var_sp->GetDeclaration().GetFile()) {
576 bool show_fullpaths =
false;
577 bool show_module =
true;
578 if (var_sp->DumpDeclaration(&s, show_fullpaths,
583 if (llvm::Error
error = valobj_sp->Dump(strm, options))
588 if (llvm::Error err = regex.
GetError())
589 result.
AppendError(llvm::toString(std::move(err)));
592 "unknown regex error when compiling '%s'", entry.c_str());
598 uint32_t expr_path_options =
607 std::string scope_string;
611 if (!scope_string.empty())
614 var_sp->GetDeclaration().GetFile()) {
615 var_sp->GetDeclaration().DumpStopContext(&s,
false);
621 valobj_sp->GetPreferredDisplayLanguage());
625 valobj_sp->GetParent() ? entry.c_str() :
nullptr);
626 if (llvm::Error
error = valobj_sp->Dump(output_stream, options))
629 if (
auto error_cstr =
error.AsCString(
nullptr))
633 "unable to find any variable expression path that matches "
641 const size_t num_variables = variable_list->
GetSize();
642 if (num_variables > 0) {
643 for (
size_t i = 0; i < num_variables; i++) {
647 std::string scope_string;
658 if (valobj_sp->IsInScope()) {
659 if (!valobj_sp->GetTargetSP()
660 ->GetDisplayRuntimeSupportValues() &&
661 valobj_sp->IsRuntimeSupportValue())
664 if (!scope_string.empty())
668 var_sp->GetDeclaration().GetFile()) {
669 var_sp->GetDeclaration().DumpStopContext(&s,
false);
675 valobj_sp->GetPreferredDisplayLanguage());
677 var_sp ? var_sp->GetName().AsCString() :
nullptr);
678 if (llvm::Error
error =
692 if (recognized_frame) {
694 recognized_frame->GetRecognizedArguments();
695 if (recognized_arg_list) {
696 for (
auto &rec_value_sp : recognized_arg_list->GetObjects()) {
699 rec_value_sp->GetPreferredDisplayLanguage());
701 if (llvm::Error
error =
726#pragma mark CommandObjectFrameRecognizer
728#define LLDB_OPTIONS_frame_recognizer_add
729#include "CommandOptions.inc"
743 switch (short_option) {
751 "invalid boolean value '%s' passed for -f option",
752 option_arg.str().c_str());
762 m_symbols.push_back(std::string(option_arg));
768 llvm_unreachable(
"Unimplemented option");
783 return llvm::ArrayRef(g_frame_recognizer_add_options);
804 "Add a new frame recognizer.", nullptr) {
806Frame recognizers allow for retrieving information about special frames based on
807ABI, arguments or other special properties of that frame, even without source
808code or debug info. Currently, one use case is to extract function arguments
809that would otherwise be unaccesible, or augment existing arguments.
811Adding a custom frame recognizer is possible by implementing a Python class
812and using the 'frame recognizer add' command. The Python class should have a
813'get_recognized_arguments' method and it will receive an argument of type
814lldb.SBFrame representing the current frame that we are trying to recognize.
815The method should return a (possibly empty) list of lldb.SBValue objects that
816represent the recognized arguments.
818An example of a recognizer that retrieves the file descriptor values from libc
819functions 'read', 'write' and 'close' follows:
821 class LibcFdRecognizer(object):
822 def get_recognized_arguments(self, frame):
823 if frame.name in ["read", "write", "close"]:
824 fd = frame.EvaluateExpression("$arg1").unsigned
825 target = frame.thread.process.target
826 value = target.CreateValueFromExpression("fd", "(int)%d" % fd)
830The file containing this implementation can be imported via 'command script
831import' and then we can register this recognizer with 'frame recognizer add'.
832It's important to restrict the recognizer to the libc library (which is
833libsystem_kernel.dylib on macOS) to avoid matching functions with the same name
836(lldb) command script import .../fd_recognizer.py
837(lldb) frame recognizer add -l fd_recognizer.LibcFdRecognizer -n read -s libsystem_kernel.dylib
839When the program is stopped at the beginning of the 'read' function in libc, we
840can view the recognizer arguments in 'frame variable':
845* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.3
846 frame #0: 0x00007fff06013ca0 libsystem_kernel.dylib`read
857#if LLDB_ENABLE_PYTHON
860 "%s needs a Python class name (-l argument).\n",
m_cmd_name.c_str());
872 "%s needs at least one symbol name (-n argument).\n",
879 "%s needs only one symbol regular expression (-n argument).\n",
888 result.
AppendWarning(
"The provided class does not exist - please define it "
889 "before attempting to use this frame recognizer");
901 recognizer_sp, module, func, Mangled::NamePreference::ePreferDemangled,
908 recognizer_sp, module, symbols,
909 Mangled::NamePreference::ePreferDemangled,
921 "Delete all frame recognizers.", nullptr) {}
934 const std::string &module,
935 llvm::ArrayRef<lldb_private::ConstString> symbols,
938 strm <<
"[disabled] ";
940 strm << name <<
", ";
943 strm <<
"module " << module <<
", ";
945 switch (symbol_mangling) {
946 case Mangled::NamePreference ::ePreferMangled:
947 strm <<
"mangled symbol ";
949 case Mangled::NamePreference ::ePreferDemangled:
950 strm <<
"demangled symbol ";
952 case Mangled::NamePreference ::ePreferDemangledWithoutArguments:
953 strm <<
"demangled (no args) symbol ";
960 llvm::interleaveComma(symbols, strm);
968 const char *help =
nullptr,
969 const char *syntax =
nullptr,
982 [&request](uint32_t rid,
bool enabled, std::string rname,
984 llvm::ArrayRef<lldb_private::ConstString> symbols,
988 rname =
"(internal)";
991 symbol_mangling, regexp);
998 uint32_t recognizer_id) = 0;
1001 uint32_t recognizer_id;
1017 interpreter,
"frame recognizer enable",
1018 "Enable a frame recognizer by id.", nullptr) {
1026 uint32_t recognizer_id)
override {
1028 if (!recognizer_mgr.SetEnabledForID(recognizer_id,
true)) {
1042 interpreter,
"frame recognizer disable",
1043 "Disable a frame recognizer by id.", nullptr) {
1051 uint32_t recognizer_id)
override {
1053 if (!recognizer_mgr.SetEnabledForID(recognizer_id,
false)) {
1067 interpreter,
"frame recognizer delete",
1068 "Delete an existing frame recognizer by id.", nullptr) {
1076 uint32_t recognizer_id)
override {
1078 if (!recognizer_mgr.RemoveRecognizerWithID(recognizer_id)) {
1091 "Show a list of active frame recognizers.",
1098 bool any_printed =
false;
1101 &any_printed](uint32_t recognizer_id,
bool enabled, std::string name,
1102 std::string module, llvm::ArrayRef<ConstString> symbols,
1107 name =
"(internal)";
1109 stream << std::to_string(recognizer_id) <<
": ";
1111 symbol_mangling, regexp);
1132 interpreter,
"frame recognizer info",
1133 "Show which frame recognizer is applied a stack frame (if any).",
1143 uint32_t frame_index;
1144 if (!llvm::to_integer(frame_index_str, frame_index)) {
1151 if (process ==
nullptr) {
1156 if (thread ==
nullptr) {
1162 "'%s' takes exactly one frame index argument.\n",
m_cmd_name.c_str());
1176 output_stream.
Printf(
"frame %d ", frame_index);
1178 output_stream <<
"is recognized by ";
1179 output_stream << recognizer->GetName();
1181 output_stream <<
"not recognized by any recognizer";
1183 output_stream.
EOL();
1192 interpreter,
"frame recognizer",
1193 "Commands for editing and viewing frame recognizers.",
1194 "frame recognizer [<sub-command-options>] ") {
1218#pragma mark CommandObjectMultiwordFrame
1225 "Commands for selecting and "
1226 "examining the current "
1227 "thread's stack frames.",
1228 "frame <subcommand> [<subcommand-options>]") {
1237#if LLDB_ENABLE_PYTHON
static void PrintRecognizerDetails(Stream &strm, const std::string &name, bool enabled, const std::string &module, llvm::ArrayRef< lldb_private::ConstString > symbols, Mangled::NamePreference symbol_mangling, bool regexp)
static llvm::raw_ostream & error(Stream &strm)
CommandObjectFrameInfo(CommandInterpreter &interpreter)
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectFrameInfo() override=default
void OptionParsingStarting(ExecutionContext *execution_context) override
std::vector< std::string > m_symbols
bool m_first_instruction_only
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
~CommandOptions() override=default
CommandObjectFrameRecognizerAdd(CommandInterpreter &interpreter)
Options * GetOptions() override
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectFrameRecognizerAdd() override=default
CommandObjectFrameRecognizerClear(CommandInterpreter &interpreter)
~CommandObjectFrameRecognizerClear() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectFrameRecognizerDelete() override=default
CommandObjectFrameRecognizerDelete(CommandInterpreter &interpreter)
void DoExecuteWithId(CommandReturnObject &result, uint32_t recognizer_id) override
CommandObjectFrameRecognizerDisable(CommandInterpreter &interpreter)
void DoExecuteWithId(CommandReturnObject &result, uint32_t recognizer_id) override
~CommandObjectFrameRecognizerDisable() override=default
void DoExecuteWithId(CommandReturnObject &result, uint32_t recognizer_id) override
CommandObjectFrameRecognizerEnable(CommandInterpreter &interpreter)
~CommandObjectFrameRecognizerEnable() override=default
CommandObjectFrameRecognizerInfo(CommandInterpreter &interpreter)
~CommandObjectFrameRecognizerInfo() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectFrameRecognizerList(CommandInterpreter &interpreter)
~CommandObjectFrameRecognizerList() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
~CommandObjectFrameRecognizer() override=default
CommandObjectFrameRecognizer(CommandInterpreter &interpreter)
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
std::optional< int32_t > relative_frame_offset
void OptionParsingStarting(ExecutionContext *execution_context) override
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
~CommandOptions() override=default
~CommandObjectFrameSelect() override=default
CommandObjectFrameSelect(CommandInterpreter &interpreter)
Options * GetOptions() override
void DoExecute(Args &command, CommandReturnObject &result) override
OptionGroupOptions m_option_group
OptionGroupFormat m_option_format
Options * GetOptions() override
OptionGroupVariable m_option_variable
OptionGroupValueObjectDisplay m_varobj_options
bool ScopeRequested(lldb::ValueType scope)
Returns true if scope matches any of the options in m_option_variable.
llvm::StringRef GetScopeString(VariableSP var_sp)
std::optional< llvm::ArrayRef< VariableSP > > findUniqueRegexMatches(RegularExpression ®ex, VariableList &matches, const VariableList &all_variables)
Finds all the variables in all_variables whose name matches regex, inserting them into matches.
~CommandObjectFrameVariable() override=default
CommandObjectFrameVariable(CommandInterpreter &interpreter)
void DoExecute(Args &command, CommandReturnObject &result) override
void DoExecute(Args &command, CommandReturnObject &result) override
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
CommandObjectWithFrameRecognizerArg(CommandInterpreter &interpreter, const char *name, const char *help=nullptr, const char *syntax=nullptr, uint32_t flags=0)
virtual void DoExecuteWithId(CommandReturnObject &result, uint32_t recognizer_id)=0
A command line argument class.
size_t GetArgumentCount() const
Gets the number of arguments left in this command object.
const char * GetArgumentAtIndex(size_t idx) const
Gets the NULL terminated C string argument pointer for the argument at index idx.
void PrintWarningsIfNecessary(Stream &s, const std::string &cmd_name)
CommandObjectMultiwordFrame(CommandInterpreter &interpreter)
~CommandObjectMultiwordFrame() override
bool LoadSubCommand(llvm::StringRef cmd_name, const lldb::CommandObjectSP &command_obj) override
virtual void SetHelpLong(llvm::StringRef str)
void AddSimpleArgumentList(lldb::CommandArgumentType arg_type, ArgumentRepetitionType repetition_type=eArgRepeatPlain)
ExecutionContext m_exe_ctx
CommandInterpreter & GetCommandInterpreter()
CommandInterpreter & m_interpreter
void void AppendError(llvm::StringRef in_string)
Stream & GetErrorStream()
void SetStatus(lldb::ReturnStatus status)
void AppendErrorWithFormat(const char *format,...) __attribute__((format(printf
lldb::ReturnStatus GetStatus() const
void void AppendWarning(llvm::StringRef in_string)
Stream & GetOutputStream()
"lldb/Utility/ArgCompletionRequest.h"
void TryCompleteCurrentArg(llvm::StringRef completion, llvm::StringRef description="")
Adds a possible completion string if the completion would complete the current argument.
size_t GetCursorIndex() const
A uniqued constant string class.
ScriptInterpreter * GetScriptInterpreter(bool can_create=true, std::optional< lldb::ScriptLanguage > language={})
DumpValueObjectOptions & SetVariableFormatDisplayLanguage(lldb::LanguageType lang=lldb::eLanguageTypeUnknown)
std::function< bool(ConstString, ConstString, const DumpValueObjectOptions &, Stream &)> DeclPrintingHelper
DumpValueObjectOptions & SetDeclPrintingHelper(DeclPrintingHelper helper)
DumpValueObjectOptions & SetRootValueObjectName(const char *name=nullptr)
DumpValueObjectOptions & SetFormat(lldb::Format format=lldb::eFormatDefault)
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
void SetFrameSP(const lldb::StackFrameSP &frame_sp)
Set accessor to set only the frame shared pointer.
StackFrame * GetFramePtr() const
Returns a pointer to the frame object.
StackFrame & GetFrameRef() const
Returns a reference to the thread object.
Process * GetProcessPtr() const
Returns a pointer to the process object.
Thread * GetThreadPtr() const
Returns a pointer to the thread object.
bool IsTopLevelFunction()
Get whether this function represents a 'top-level' function.
void Append(OptionGroup *group)
Append options from a OptionGroup class.
DumpValueObjectOptions GetAsDumpOptions(LanguageRuntimeDescriptionDisplayVerbosity lang_descr_verbosity=eLanguageRuntimeDescriptionDisplayVerbosityFull, lldb::Format format=lldb::eFormatDefault, lldb::TypeSummaryImplSP summary_sp=lldb::TypeSummaryImplSP())
lldb::DynamicValueType use_dynamic
OptionValueString summary_string
OptionValueString summary
bool show_recognized_args
bool IsCurrentValueEmpty() const
const char * GetCurrentValue() const
A command line option parsing protocol class.
void GenerateOptionUsage(Stream &strm, CommandObject &cmd, uint32_t screen_width)
std::vector< Option > m_getopt_table
A plug-in interface definition class for debugging a process.
bool IsValid() const
Test if this object contains a valid regular expression.
llvm::Error GetError() const
Return an error if the regular expression failed to compile.
virtual bool CheckObjectExists(const char *name)
Python implementation for frame recognizers.
void AddRecognizer(lldb::StackFrameRecognizerSP recognizer, ConstString module, llvm::ArrayRef< ConstString > symbols, Mangled::NamePreference symbol_mangling, bool first_instruction_only=true)
Add a new recognizer that triggers on a given symbol name.
void ForEach(std::function< void(uint32_t recognizer_id, bool enabled, std::string recognizer_name, std::string module, llvm::ArrayRef< ConstString > symbols, Mangled::NamePreference name_preference, bool regexp)> const &callback)
lldb::StackFrameRecognizerSP GetRecognizerForFrame(lldb::StackFrameSP frame)
void RemoveAllRecognizers()
This base class provides an interface to stack frames.
@ eExpressionPathOptionCheckPtrVsMember
@ eExpressionPathOptionsInspectAnonymousUnions
@ eExpressionPathOptionsAllowDirectIVarAccess
VariableList * GetVariableList(bool get_file_globals, Status *error_ptr)
Retrieve the list of variables that are in scope at this StackFrame's pc.
void DumpUsingSettingsFormat(Stream *strm, bool show_unique=false, const char *frame_marker=nullptr)
Print a description for this frame using the frame-format formatter settings.
lldb::ValueObjectSP GetValueForVariableExpressionPath(llvm::StringRef var_expr, lldb::DynamicValueType use_dynamic, uint32_t options, lldb::VariableSP &var_sp, Status &error)
Create a ValueObject for a variable name / pathname, possibly including simple dereference/child sele...
lldb::ValueObjectSP GetValueObjectForFrameVariable(const lldb::VariableSP &variable_sp, lldb::DynamicValueType use_dynamic)
Create a ValueObject for a given Variable in this StackFrame.
const SymbolContext & GetSymbolContext(lldb::SymbolContextItem resolve_scope)
Provide a SymbolContext for this StackFrame's current pc value.
lldb::RecognizedStackFrameSP GetRecognizedFrame()
static Status FromErrorStringWithFormat(const char *format,...) __attribute__((format(printf
static lldb::ValueObjectSP GetCrashingDereference(lldb::StopInfoSP &stop_info_sp, lldb::addr_t *crashing_address=nullptr)
llvm::StringRef GetString() const
A stream class that can stream formatted output to a file.
size_t Printf(const char *format,...) __attribute__((format(printf
Output printf formatted output to the stream.
size_t PutCString(llvm::StringRef cstr)
Output a C string to the stream.
virtual void Flush()=0
Flush the stream.
size_t EOL()
Output and End of Line character to the stream.
Defines a symbol context baton that can be handed other debug core functions.
Function * function
The Function for a given query.
A class that represents statistics for a since lldb_private::Target.
StatsSuccessFail & GetFrameVariableStats()
TargetStats & GetStatistics()
StackFrameRecognizerManager & GetFrameRecognizerManager()
virtual lldb::StackFrameSP GetStackFrameAtIndex(uint32_t idx)
lldb::StackFrameSP GetSelectedFrame(SelectMostRelevant select_most_relevant)
uint32_t GetSelectedFrameIndex(SelectMostRelevant select_most_relevant)
lldb::StopInfoSP GetStopInfo()
bool SetSelectedFrameByIndexNoisily(uint32_t frame_idx, Stream &output_stream)
virtual uint32_t GetStackFrameCount()
GetStackFrameCount can be expensive.
llvm::Error PrintValueObject()
bool AddVariableIfUnique(const lldb::VariableSP &var_sp)
lldb::VariableSP GetVariableAtIndex(size_t idx) const
llvm::ArrayRef< lldb::VariableSP > toArrayRef()
@ SelectMostRelevantFrame
A class that represents a running process on the host machine.
std::vector< OptionArgElement > OptionElementVector
const char * toString(AppleArm64ExceptionClass EC)
@ eLanguageRuntimeDescriptionDisplayVerbosityFull
std::shared_ptr< lldb_private::StackFrame > StackFrameSP
std::shared_ptr< lldb_private::TypeSummaryImpl > TypeSummaryImplSP
std::shared_ptr< lldb_private::CommandObject > CommandObjectSP
std::shared_ptr< lldb_private::ValueObject > ValueObjectSP
Format
Display format definitions.
std::shared_ptr< lldb_private::RegularExpression > RegularExpressionSP
std::shared_ptr< lldb_private::ValueObjectList > ValueObjectListSP
@ eReturnStatusSuccessFinishResult
@ eReturnStatusSuccessFinishNoResult
std::shared_ptr< lldb_private::Variable > VariableSP
std::shared_ptr< lldb_private::StackFrameRecognizer > StackFrameRecognizerSP
std::shared_ptr< lldb_private::StopInfo > StopInfoSP
@ eValueTypeVTableEntry
function pointer in virtual function table
@ eValueTypeVTable
virtual function table
@ eValueTypeVariableGlobal
globals variable
@ eValueTypeConstResult
constant result variables
@ eValueTypeVariableLocal
function local variables
@ eValueTypeVariableArgument
function argument variables
@ eValueTypeRegister
stack frame register value
@ eValueTypeVariableStatic
static variable
@ eValueTypeRegisterSet
A collection of stack frame register values.
@ eValueTypeVariableThreadLocal
thread local storage variable
static bool ToBoolean(llvm::StringRef s, bool fail_value, bool *success_ptr)