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.");
136 valobj_sp = frame_sp->GuessValueForAddress(*
m_options.address);
138 valobj_sp = frame_sp->GuessValueForRegisterAndOffset(
141 StopInfoSP stop_info_sp = thread->GetStopInfo();
143 result.
AppendError(
"no arguments provided, and no stop info");
161 GetExpressionPathFormat::eGetExpressionPathFormatHonorPointers;
162 valobj_sp->GetExpressionPath(stream, format);
163 stream.PutCString(
" =");
171 assert(valobj_sp.get() &&
"Must have a valid ValueObject to print");
180#pragma mark CommandObjectFrameInfo
188 "List information about the current "
189 "stack frame in the current thread.",
191 eCommandRequiresFrame | eCommandTryTargetAPILock |
192 eCommandProcessMustBeLaunched |
193 eCommandProcessMustBePaused) {}
204#pragma mark CommandObjectFrameSelect
208#define LLDB_OPTIONS_frame_select
209#include "CommandOptions.inc"
223 switch (short_option) {
226 if (option_arg.getAsInteger(0, offset) || offset == INT32_MIN) {
228 "invalid frame offset argument '%s'", option_arg.str().c_str());
235 llvm_unreachable(
"Unimplemented option");
246 return llvm::ArrayRef(g_frame_select_options);
254 "Select the current stack frame by "
255 "index from within the current thread "
256 "(see 'thread backtrace'.)",
258 eCommandRequiresThread | eCommandTryTargetAPILock |
259 eCommandProcessMustBeLaunched |
260 eCommandProcessMustBePaused) {
270 uint32_t candidate_idx = frame_idx;
271 const unsigned max_depth = 12;
272 for (
unsigned num_try = 0; num_try < max_depth; ++num_try) {
273 if (candidate_idx == 0 && *
m_options.relative_frame_offset == -1) {
277 candidate_idx += *
m_options.relative_frame_offset;
278 if (
auto candidate_sp = thread.GetStackFrameAtIndex(candidate_idx)) {
279 if (candidate_sp->IsHidden())
288 m_options.relative_frame_offset = candidate_idx - frame_idx;
306 if ((*
m_options.relative_frame_offset == 1 ||
307 *
m_options.relative_frame_offset == -1)) {
308 if (
auto current_frame_sp = thread->GetStackFrameAtIndex(frame_idx);
309 !current_frame_sp->IsHidden())
313 if (*
m_options.relative_frame_offset < 0) {
314 if (
static_cast<int32_t
>(frame_idx) >=
316 frame_idx += *
m_options.relative_frame_offset;
318 if (frame_idx == 0) {
321 result.
AppendError(
"already at the bottom of the stack");
326 }
else if (*
m_options.relative_frame_offset > 0) {
331 const uint32_t frame_requested =
332 frame_idx + *
m_options.relative_frame_offset;
333 StackFrameSP frame_sp = thread->GetStackFrameAtIndex(frame_requested);
335 frame_idx = frame_requested;
338 const uint32_t num_frames = thread->GetStackFrameCount();
339 if (
static_cast<int32_t
>(num_frames - frame_idx) >
341 frame_idx += *
m_options.relative_frame_offset;
343 if (frame_idx == num_frames - 1) {
346 result.
AppendError(
"already at the top of the stack");
349 frame_idx = num_frames - 1;
356 "too many arguments; expected frame-index, saw '%s'.\n",
366 if (command[0].ref().getAsInteger(0, frame_idx)) {
379 bool success = thread->SetSelectedFrameByIndexNoisily(
393#pragma mark CommandObjectFrameVariable
399 interpreter,
"frame variable",
400 "Show variables for the current stack frame. Defaults to all "
401 "arguments and local variables in scope. Names of argument, "
402 "local, file static and file global variables can be specified.",
404 eCommandRequiresFrame | eCommandTryTargetAPILock |
405 eCommandProcessMustBeLaunched | eCommandProcessMustBePaused |
406 eCommandRequiresProcess),
411Children of aggregate variables can be specified such as 'var->child.x'. In
412'frame variable', the operators -> and [] do not invoke operator overloads if
413they exist, but directly access the specified element. If you want to trigger
414operator overloads use the expression command to print the variable instead.
416It is worth noting that except for overloaded operators, when printing local
417variables 'expr local_var' and 'frame var local_var' produce the same results.
418However, 'frame variable' is more efficient, since it uses debug information and
419memory reads directly, rather than parsing and evaluating an expression, which
420may even involve JITing and running code in the target program.)");
440 return llvm::StringRef();
442 switch (var_sp->GetScope()) {
457 return llvm::StringRef();
479 llvm_unreachable(
"Unexpected scope value");
488 std::optional<llvm::ArrayRef<VariableSP>>
492 bool any_matches =
false;
493 const size_t previous_num_vars = matches.
GetSize();
503 return matches.
toArrayRef().drop_front(previous_num_vars);
507 void DoExecute(Args &command, CommandReturnObject &result)
override {
510 StackFrame *frame =
m_exe_ctx.GetFramePtr();
523 VariableList *variable_list =
526 if (
error.Fail() && (!variable_list || variable_list->
GetSize() == 0)) {
538 summary_format_sp = std::make_shared<StringSummaryFormat>(
539 TypeSummaryImpl::Flags(),
546 const SymbolContext &sym_ctx =
553 options.SetFormat(format);
555 if (!command.
empty()) {
556 VariableList regex_var_list;
560 for (
auto &entry : command) {
562 llvm::StringRef name_str = entry.ref();
565 std::optional<llvm::ArrayRef<VariableSP>> results =
569 "no variables matched the regular expression '%s'.",
579 std::string scope_string;
583 if (!scope_string.empty())
587 var_sp->GetDeclaration().GetFile()) {
588 bool show_fullpaths =
false;
589 bool show_module =
true;
590 if (var_sp->DumpDeclaration(&s, show_fullpaths,
595 if (llvm::Error
error = valobj_sp->Dump(strm, options))
600 if (llvm::Error err = regex.
GetError())
601 result.
AppendError(llvm::toString(std::move(err)));
604 "unknown regex error when compiling '%s'", entry.c_str());
610 uint32_t expr_path_options =
622 std::string scope_string;
626 if (!scope_string.empty())
629 var_sp->GetDeclaration().GetFile()) {
630 var_sp->GetDeclaration().DumpStopContext(&s,
false);
634 options.SetFormat(format);
635 options.SetVariableFormatDisplayLanguage(
636 valobj_sp->GetPreferredDisplayLanguage());
639 options.SetRootValueObjectName(
640 valobj_sp->GetParent() ? entry.c_str() :
nullptr);
652 if (llvm::Error
error = valobj_sp->Dump(output_stream, options))
657 if (
auto error_cstr =
error.AsCString(
nullptr))
661 "unable to find any variable expression path that matches "
669 const size_t num_variables = variable_list->
GetSize();
670 if (num_variables > 0) {
671 for (
size_t i = 0; i < num_variables; i++) {
675 std::string scope_string;
688 if (valobj_sp->IsInScope()) {
689 if (!valobj_sp->GetTargetSP()
690 ->GetDisplayRuntimeSupportValues() &&
691 valobj_sp->IsRuntimeSupportValue())
694 if (!scope_string.empty())
698 var_sp->GetDeclaration().GetFile()) {
699 var_sp->GetDeclaration().DumpStopContext(&s,
false);
703 options.SetFormat(format);
704 options.SetVariableFormatDisplayLanguage(
705 valobj_sp->GetPreferredDisplayLanguage());
706 options.SetRootValueObjectName(
707 var_sp ? var_sp->GetName().AsCString(
nullptr) :
nullptr);
708 if (llvm::Error
error =
722 if (recognized_frame) {
724 recognized_frame->GetRecognizedArguments();
725 if (recognized_arg_list) {
726 for (
auto &rec_value_sp : recognized_arg_list->GetObjects()) {
729 options.SetVariableFormatDisplayLanguage(
730 rec_value_sp->GetPreferredDisplayLanguage());
731 options.SetRootValueObjectName(
732 rec_value_sp->GetName().AsCString(
nullptr));
733 if (llvm::Error
error =
758#pragma mark CommandObjectFrameRecognizer
760#define LLDB_OPTIONS_frame_recognizer_add
761#include "CommandOptions.inc"
775 switch (short_option) {
783 "invalid boolean value '%s' passed for -f option",
784 option_arg.str().c_str());
794 m_symbols.push_back(std::string(option_arg));
800 llvm_unreachable(
"Unimplemented option");
815 return llvm::ArrayRef(g_frame_recognizer_add_options);
836 "Add a new frame recognizer.", nullptr) {
838Frame recognizers allow for retrieving information about special frames based on
839ABI, arguments or other special properties of that frame, even without source
840code or debug info. Currently, one use case is to extract function arguments
841that would otherwise be unaccesible, or augment existing arguments.
843Adding a custom frame recognizer is possible by implementing a Python class
844and using the 'frame recognizer add' command. The Python class should have a
845'get_recognized_arguments' method and it will receive an argument of type
846lldb.SBFrame representing the current frame that we are trying to recognize.
847The method should return a (possibly empty) list of lldb.SBValue objects that
848represent the recognized arguments.
850An example of a recognizer that retrieves the file descriptor values from libc
851functions 'read', 'write' and 'close' follows:
853 class LibcFdRecognizer(object):
854 def get_recognized_arguments(self, frame):
855 if frame.name in ["read", "write", "close"]:
856 fd = frame.EvaluateExpression("$arg1").unsigned
857 target = frame.thread.process.target
858 value = target.CreateValueFromExpression("fd", "(int)%d" % fd)
862The file containing this implementation can be imported via 'command script
863import' and then we can register this recognizer with 'frame recognizer add'.
864It's important to restrict the recognizer to the libc library (which is
865libsystem_kernel.dylib on macOS) to avoid matching functions with the same name
868(lldb) command script import .../fd_recognizer.py
869(lldb) frame recognizer add -l fd_recognizer.LibcFdRecognizer -n read -s libsystem_kernel.dylib
871When the program is stopped at the beginning of the 'read' function in libc, we
872can view the recognizer arguments in 'frame variable':
877* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.3
878 frame #0: 0x00007fff06013ca0 libsystem_kernel.dylib`read
889#if LLDB_ENABLE_PYTHON
892 "%s needs a Python class name (-l argument).\n",
m_cmd_name.c_str());
904 "%s needs at least one symbol name (-n argument).\n",
911 "%s needs only one symbol regular expression (-n argument).\n",
920 result.
AppendWarning(
"the provided class does not exist - please define it "
921 "before attempting to use this frame recognizer");
926 interpreter,
m_options.m_class_name.c_str()));
928 auto module = std::make_shared<RegularExpression>(m_options.m_module);
930 std::make_shared<RegularExpression>(
m_options.m_symbols.front());
935 auto module = ConstString(m_options.m_module);
936 std::vector<ConstString> symbols(
m_options.m_symbols.begin(),
939 recognizer_sp, module, symbols,
952 "Delete all frame recognizers.", nullptr) {}
965 const std::string &module,
966 llvm::ArrayRef<lldb_private::ConstString> symbols,
969 strm <<
"[disabled] ";
971 strm << name <<
", ";
974 strm <<
"module " << module <<
", ";
976 switch (symbol_mangling) {
977 case Mangled::NamePreference ::ePreferMangled:
978 strm <<
"mangled symbol ";
980 case Mangled::NamePreference ::ePreferDemangled:
981 strm <<
"demangled symbol ";
983 case Mangled::NamePreference ::ePreferDemangledWithoutArguments:
984 strm <<
"demangled (no args) symbol ";
991 llvm::interleaveComma(symbols, strm);
999 const char *help =
nullptr,
1000 const char *syntax =
nullptr,
1013 [&request](uint32_t rid,
bool enabled, std::string rname,
1015 llvm::ArrayRef<lldb_private::ConstString> symbols,
1019 rname =
"(internal)";
1022 symbol_mangling, regexp);
1029 uint32_t recognizer_id) = 0;
1032 uint32_t recognizer_id;
1048 interpreter,
"frame recognizer enable",
1049 "Enable a frame recognizer by id.", nullptr) {
1057 uint32_t recognizer_id)
override {
1059 if (!recognizer_mgr.SetEnabledForID(recognizer_id,
true)) {
1073 interpreter,
"frame recognizer disable",
1074 "Disable a frame recognizer by id.", nullptr) {
1082 uint32_t recognizer_id)
override {
1084 if (!recognizer_mgr.SetEnabledForID(recognizer_id,
false)) {
1098 interpreter,
"frame recognizer delete",
1099 "Delete an existing frame recognizer by id.", nullptr) {
1107 uint32_t recognizer_id)
override {
1109 if (!recognizer_mgr.RemoveRecognizerWithID(recognizer_id)) {
1122 "Show a list of active frame recognizers.",
1129 bool any_printed =
false;
1132 &any_printed](uint32_t recognizer_id,
bool enabled, std::string name,
1133 std::string module, llvm::ArrayRef<ConstString> symbols,
1138 name =
"(internal)";
1140 stream << std::to_string(recognizer_id) <<
": ";
1142 symbol_mangling, regexp);
1163 interpreter,
"frame recognizer info",
1164 "Show which frame recognizer is applied a stack frame (if any).",
1174 uint32_t frame_index;
1175 if (!llvm::to_integer(frame_index_str, frame_index)) {
1182 if (process ==
nullptr) {
1187 if (thread ==
nullptr) {
1193 "'%s' takes exactly one frame index argument.\n",
m_cmd_name.c_str());
1197 StackFrameSP frame_sp = thread->GetStackFrameAtIndex(frame_index);
1207 output_stream.
Printf(
"frame %d ", frame_index);
1209 output_stream <<
"is recognized by ";
1210 output_stream << recognizer->GetName();
1212 output_stream <<
"not recognized by any recognizer";
1214 output_stream.
EOL();
1223 interpreter,
"frame recognizer",
1224 "Commands for editing and viewing frame recognizers.",
1225 "frame recognizer [<sub-command-options>] ") {
1249#pragma mark CommandObjectMultiwordFrame
1256 "Commands for selecting and "
1257 "examining the current "
1258 "thread's stack frames.",
1259 "frame <subcommand> [<subcommand-options>]") {
1268#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
void SkipHiddenFrames(Thread &thread, uint32_t frame_idx)
~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.
CommandObjectMultiwordFrame(CommandInterpreter &interpreter)
~CommandObjectMultiwordFrame() override
bool LoadSubCommand(llvm::StringRef cmd_name, const lldb::CommandObjectSP &command_obj) override
CommandObjectMultiword(CommandInterpreter &interpreter, const char *name, const char *help=nullptr, const char *syntax=nullptr, uint32_t flags=0)
friend class CommandInterpreter
CommandObjectParsed(CommandInterpreter &interpreter, const char *name, const char *help=nullptr, const char *syntax=nullptr, uint32_t flags=0)
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 AppendError(llvm::StringRef in_string)
const ValueObjectList & GetValueObjectList() const
Stream & GetErrorStream()
void SetStatus(lldb::ReturnStatus status)
void SetError(Status error)
void AppendErrorWithFormat(const char *format,...) __attribute__((format(printf
lldb::ReturnStatus GetStatus() const
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={})
std::function< bool(ConstString, ConstString, const DumpValueObjectOptions &, Stream &)> DeclPrintingHelper
DumpValueObjectOptions & SetDeclPrintingHelper(DeclPrintingHelper helper)
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
bool IsTopLevelFunction()
Get whether this function represents a 'top-level' function.
A command line option parsing protocol class.
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()
virtual lldb::ValueObjectSP GetValueForVariableExpressionPath(llvm::StringRef var_expr, lldb::DynamicValueType use_dynamic, uint32_t options, lldb::VariableSP &var_sp, Status &error, lldb::DILMode mode=lldb::eDILModeFull)
Create a ValueObject for a variable name / pathname, possibly including simple dereference/child sele...
@ eExpressionPathOptionCheckPtrVsMember
@ eExpressionPathOptionsInspectAnonymousUnions
@ eExpressionPathOptionsAllowDirectIVarAccess
@ eExpressionPathOptionsAllowVarUpdates
virtual VariableList * GetVariableList(bool get_file_globals, Status *error_ptr)
Retrieve the list of variables whose scope either:
virtual lldb::ValueObjectSP GetValueObjectForFrameVariable(const lldb::VariableSP &variable_sp, lldb::DynamicValueType use_dynamic)
Create a ValueObject for a given Variable in this StackFrame.
virtual const SymbolContext & GetSymbolContext(lldb::SymbolContextItem resolve_scope)
Provide a SymbolContext for this StackFrame's current pc value.
virtual 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.
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()
void Append(const lldb::ValueObjectSP &val_obj_sp)
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
@ eLanguageRuntimeDescriptionDisplayVerbosityFull
std::string toString(FormatterBytecode::OpCodes op)
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::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)