12#include "lldb/Host/Config.h"
43#pragma mark CommandObjectFrameDiagnose
49#define LLDB_OPTIONS_frame_diag
50#include "CommandOptions.inc"
64 switch (short_option) {
71 if (option_arg.getAsInteger(0, *
address)) {
74 "invalid address argument '%s'", option_arg.str().c_str());
80 if (option_arg.getAsInteger(0, *
offset)) {
83 "invalid offset argument '%s'", option_arg.str().c_str());
88 llvm_unreachable(
"Unimplemented option");
101 return llvm::ArrayRef(g_frame_diag_options);
106 std::optional<ConstString>
reg;
112 "Try to determine what path the current stop "
113 "location used to get to a register or address",
115 eCommandRequiresThread | eCommandTryTargetAPILock |
116 eCommandProcessMustBeLaunched |
117 eCommandProcessMustBePaused) {
135 "`frame diagnose --address` is incompatible with other arguments.");
138 valobj_sp = frame_sp->GuessValueForAddress(*
m_options.address);
140 valobj_sp = frame_sp->GuessValueForRegisterAndOffset(
143 StopInfoSP stop_info_sp = thread->GetStopInfo();
145 result.
AppendError(
"no arguments provided, and no stop info");
163 GetExpressionPathFormat::eGetExpressionPathFormatHonorPointers;
164 valobj_sp->GetExpressionPath(stream, format);
165 stream.PutCString(
" =");
173 assert(valobj_sp.get() &&
"Must have a valid ValueObject to print");
182#pragma mark CommandObjectFrameInfo
190 "List information about the current "
191 "stack frame in the current thread.",
193 eCommandRequiresFrame | eCommandTryTargetAPILock |
194 eCommandProcessMustBeLaunched |
195 eCommandProcessMustBePaused) {}
206#pragma mark CommandObjectFrameSelect
210#define LLDB_OPTIONS_frame_select
211#include "CommandOptions.inc"
225 switch (short_option) {
228 if (option_arg.getAsInteger(0, offset) || offset == INT32_MIN) {
230 "invalid frame offset argument '%s'", option_arg.str().c_str());
237 llvm_unreachable(
"Unimplemented option");
248 return llvm::ArrayRef(g_frame_select_options);
256 "Select the current stack frame by "
257 "index from within the current thread "
258 "(see 'thread backtrace'.)",
260 eCommandRequiresThread | eCommandTryTargetAPILock |
261 eCommandProcessMustBeLaunched |
262 eCommandProcessMustBePaused) {
272 uint32_t candidate_idx = frame_idx;
273 const unsigned max_depth = 12;
274 for (
unsigned num_try = 0; num_try < max_depth; ++num_try) {
275 if (candidate_idx == 0 && *
m_options.relative_frame_offset == -1) {
279 candidate_idx += *
m_options.relative_frame_offset;
280 if (
auto candidate_sp = thread.GetStackFrameAtIndex(candidate_idx)) {
281 if (candidate_sp->IsHidden())
290 m_options.relative_frame_offset = candidate_idx - frame_idx;
308 if ((*
m_options.relative_frame_offset == 1 ||
309 *
m_options.relative_frame_offset == -1)) {
310 if (
auto current_frame_sp = thread->GetStackFrameAtIndex(frame_idx);
311 !current_frame_sp->IsHidden())
315 if (*
m_options.relative_frame_offset < 0) {
316 if (
static_cast<int32_t
>(frame_idx) >=
318 frame_idx += *
m_options.relative_frame_offset;
320 if (frame_idx == 0) {
323 result.
AppendError(
"already at the bottom of the stack");
328 }
else if (*
m_options.relative_frame_offset > 0) {
333 const uint32_t frame_requested =
334 frame_idx + *
m_options.relative_frame_offset;
335 StackFrameSP frame_sp = thread->GetStackFrameAtIndex(frame_requested);
337 frame_idx = frame_requested;
340 const uint32_t num_frames = thread->GetStackFrameCount();
341 if (
static_cast<int32_t
>(num_frames - frame_idx) >
343 frame_idx += *
m_options.relative_frame_offset;
345 if (frame_idx == num_frames - 1) {
348 result.
AppendError(
"already at the top of the stack");
351 frame_idx = num_frames - 1;
358 "too many arguments; expected frame-index, saw '%s'.\n",
368 if (command[0].ref().getAsInteger(0, frame_idx)) {
381 bool success = thread->SetSelectedFrameByIndexNoisily(
395#pragma mark CommandObjectFrameVariable
401 interpreter,
"frame variable",
402 "Show variables for the current stack frame. Defaults to all "
403 "arguments and local variables in scope. Names of argument, "
404 "local, file static and file global variables can be specified.",
406 eCommandRequiresFrame | eCommandTryTargetAPILock |
407 eCommandProcessMustBeLaunched | eCommandProcessMustBePaused |
408 eCommandRequiresProcess),
413Children of aggregate variables can be specified such as 'var->child.x'. In
414'frame variable', the operators -> and [] do not invoke operator overloads if
415they exist, but directly access the specified element. If you want to trigger
416operator overloads use the expression command to print the variable instead.
418It is worth noting that except for overloaded operators, when printing local
419variables 'expr local_var' and 'frame var local_var' produce the same results.
420However, 'frame variable' is more efficient, since it uses debug information and
421memory reads directly, rather than parsing and evaluating an expression, which
422may even involve JITing and running code in the target program.)");
442 return llvm::StringRef();
444 auto vt = var_sp->GetScope();
452 return is_synthetic ?
"(synthetic) GLOBAL: " :
"GLOBAL: ";
454 return is_synthetic ?
"(synthetic) STATIC: " :
"STATIC: ";
456 return is_synthetic ?
"(synthetic) ARG: " :
"ARG: ";
458 return is_synthetic ?
"(synthetic) LOCAL: " :
"LOCAL: ";
460 return is_synthetic ?
"(synthetic) THREAD: " :
"THREAD: ";
465 return llvm::StringRef();
498 llvm_unreachable(
"Unexpected scope value");
507 std::optional<llvm::ArrayRef<VariableSP>>
511 bool any_matches =
false;
512 const size_t previous_num_vars = matches.
GetSize();
522 return matches.
toArrayRef().drop_front(previous_num_vars);
526 void DoExecute(Args &command, CommandReturnObject &result)
override {
529 StackFrame *frame =
m_exe_ctx.GetFramePtr();
542 VariableList *variable_list =
546 if (
error.Fail() && (!variable_list || variable_list->
GetSize() == 0)) {
558 summary_format_sp = std::make_shared<StringSummaryFormat>(
559 TypeSummaryImpl::Flags(),
566 const SymbolContext &sym_ctx =
573 options.SetFormat(format);
575 if (!command.
empty()) {
576 VariableList regex_var_list;
580 for (
auto &entry : command) {
582 llvm::StringRef name_str = entry.ref();
585 std::optional<llvm::ArrayRef<VariableSP>> results =
589 "no variables matched the regular expression '%s'.",
599 std::string scope_string;
603 if (!scope_string.empty())
607 var_sp->GetDeclaration().GetFile()) {
608 bool show_fullpaths =
false;
609 bool show_module =
true;
610 if (var_sp->DumpDeclaration(&s, show_fullpaths,
615 if (llvm::Error
error = valobj_sp->Dump(strm, options))
620 if (llvm::Error err = regex.
GetError())
621 result.
AppendError(llvm::toString(std::move(err)));
624 "unknown regex error when compiling '%s'", entry.c_str());
630 uint32_t expr_path_options =
642 std::string scope_string;
646 if (!scope_string.empty())
649 var_sp->GetDeclaration().GetFile()) {
650 var_sp->GetDeclaration().DumpStopContext(&s,
false);
654 options.SetFormat(format);
655 options.SetVariableFormatDisplayLanguage(
656 valobj_sp->GetPreferredDisplayLanguage());
659 options.SetRootValueObjectName(
660 valobj_sp->GetParent() ? entry.c_str() :
nullptr);
672 if (llvm::Error
error = valobj_sp->Dump(output_stream, options))
677 if (
auto error_cstr =
error.AsCString(
nullptr))
681 "unable to find any variable expression path that matches "
689 const size_t num_variables = variable_list->
GetSize();
690 if (num_variables > 0) {
691 for (
size_t i = 0; i < num_variables; i++) {
695 std::string scope_string;
708 if (valobj_sp->IsInScope()) {
709 if (!valobj_sp->GetTargetSP()
710 ->GetDisplayRuntimeSupportValues() &&
711 valobj_sp->IsRuntimeSupportValue())
714 if (!scope_string.empty())
718 var_sp->GetDeclaration().GetFile()) {
719 var_sp->GetDeclaration().DumpStopContext(&s,
false);
723 options.SetFormat(format);
724 options.SetVariableFormatDisplayLanguage(
725 valobj_sp->GetPreferredDisplayLanguage());
726 options.SetRootValueObjectName(
727 var_sp ? var_sp->GetName().AsCString(
nullptr) :
nullptr);
728 if (llvm::Error
error =
742 if (recognized_frame) {
744 recognized_frame->GetRecognizedArguments();
745 if (recognized_arg_list) {
746 for (
auto &rec_value_sp : recognized_arg_list->GetObjects()) {
749 options.SetVariableFormatDisplayLanguage(
750 rec_value_sp->GetPreferredDisplayLanguage());
751 options.SetRootValueObjectName(
752 rec_value_sp->GetName().AsCString(
nullptr));
753 if (llvm::Error
error =
778#pragma mark CommandObjectFrameRecognizer
780#define LLDB_OPTIONS_frame_recognizer_add
781#include "CommandOptions.inc"
795 switch (short_option) {
803 "invalid boolean value '%s' passed for -f option",
804 option_arg.str().c_str());
814 m_symbols.push_back(std::string(option_arg));
820 llvm_unreachable(
"Unimplemented option");
835 return llvm::ArrayRef(g_frame_recognizer_add_options);
856 "Add a new frame recognizer.", nullptr) {
858Frame recognizers allow for retrieving information about special frames based on
859ABI, arguments or other special properties of that frame, even without source
860code or debug info. Currently, one use case is to extract function arguments
861that would otherwise be unaccesible, or augment existing arguments.
863Adding a custom frame recognizer is possible by implementing a Python class
864and using the 'frame recognizer add' command. The Python class should have a
865'get_recognized_arguments' method and it will receive an argument of type
866lldb.SBFrame representing the current frame that we are trying to recognize.
867The method should return a (possibly empty) list of lldb.SBValue objects that
868represent the recognized arguments.
870An example of a recognizer that retrieves the file descriptor values from libc
871functions 'read', 'write' and 'close' follows:
873 class LibcFdRecognizer(object):
874 def get_recognized_arguments(self, frame):
875 if frame.name in ["read", "write", "close"]:
876 fd = frame.EvaluateExpression("$arg1").unsigned
877 target = frame.thread.process.target
878 value = target.CreateValueFromExpression("fd", "(int)%d" % fd)
882The file containing this implementation can be imported via 'command script
883import' and then we can register this recognizer with 'frame recognizer add'.
884It's important to restrict the recognizer to the libc library (which is
885libsystem_kernel.dylib on macOS) to avoid matching functions with the same name
888(lldb) command script import .../fd_recognizer.py
889(lldb) frame recognizer add -l fd_recognizer.LibcFdRecognizer -n read -s libsystem_kernel.dylib
891When the program is stopped at the beginning of the 'read' function in libc, we
892can view the recognizer arguments in 'frame variable':
897* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.3
898 frame #0: 0x00007fff06013ca0 libsystem_kernel.dylib`read
909#if LLDB_ENABLE_PYTHON
912 "%s needs a Python class name (-l argument).\n",
m_cmd_name.c_str());
924 "%s needs at least one symbol name (-n argument).\n",
931 "%s needs only one symbol regular expression (-n argument).\n",
940 result.
AppendWarning(
"the provided class does not exist - please define it "
941 "before attempting to use this frame recognizer");
946 interpreter,
m_options.m_class_name.c_str()));
948 auto module = std::make_shared<RegularExpression>(m_options.m_module);
950 std::make_shared<RegularExpression>(
m_options.m_symbols.front());
955 auto module = ConstString(m_options.m_module);
956 std::vector<ConstString> symbols(
m_options.m_symbols.begin(),
959 recognizer_sp, module, symbols,
972 "Delete all frame recognizers.", nullptr) {}
985 const std::string &module,
986 llvm::ArrayRef<lldb_private::ConstString> symbols,
989 strm <<
"[disabled] ";
991 strm << name <<
", ";
994 strm <<
"module " << module <<
", ";
996 switch (symbol_mangling) {
997 case Mangled::NamePreference ::ePreferMangled:
998 strm <<
"mangled symbol ";
1000 case Mangled::NamePreference ::ePreferDemangled:
1001 strm <<
"demangled symbol ";
1003 case Mangled::NamePreference ::ePreferDemangledWithoutArguments:
1004 strm <<
"demangled (no args) symbol ";
1011 llvm::interleaveComma(symbols, strm);
1019 const char *help =
nullptr,
1020 const char *syntax =
nullptr,
1033 [&request](uint32_t rid,
bool enabled, std::string rname,
1035 llvm::ArrayRef<lldb_private::ConstString> symbols,
1039 rname =
"(internal)";
1042 symbol_mangling, regexp);
1049 uint32_t recognizer_id) = 0;
1052 uint32_t recognizer_id;
1068 interpreter,
"frame recognizer enable",
1069 "Enable a frame recognizer by id.", nullptr) {
1077 uint32_t recognizer_id)
override {
1079 if (!recognizer_mgr.SetEnabledForID(recognizer_id,
true)) {
1093 interpreter,
"frame recognizer disable",
1094 "Disable a frame recognizer by id.", nullptr) {
1102 uint32_t recognizer_id)
override {
1104 if (!recognizer_mgr.SetEnabledForID(recognizer_id,
false)) {
1118 interpreter,
"frame recognizer delete",
1119 "Delete an existing frame recognizer by id.", nullptr) {
1127 uint32_t recognizer_id)
override {
1129 if (!recognizer_mgr.RemoveRecognizerWithID(recognizer_id)) {
1142 "Show a list of active frame recognizers.",
1149 bool any_printed =
false;
1152 &any_printed](uint32_t recognizer_id,
bool enabled, std::string name,
1153 std::string module, llvm::ArrayRef<ConstString> symbols,
1158 name =
"(internal)";
1160 stream << std::to_string(recognizer_id) <<
": ";
1162 symbol_mangling, regexp);
1183 interpreter,
"frame recognizer info",
1184 "Show which frame recognizer is applied a stack frame (if any).",
1194 uint32_t frame_index;
1195 if (!llvm::to_integer(frame_index_str, frame_index)) {
1202 if (process ==
nullptr) {
1207 if (thread ==
nullptr) {
1213 "'%s' takes exactly one frame index argument.\n",
m_cmd_name.c_str());
1217 StackFrameSP frame_sp = thread->GetStackFrameAtIndex(frame_index);
1227 output_stream.
Printf(
"frame %d ", frame_index);
1229 output_stream <<
"is recognized by ";
1230 output_stream << recognizer->GetName();
1232 output_stream <<
"not recognized by any recognizer";
1234 output_stream.
EOL();
1243 interpreter,
"frame recognizer",
1244 "Commands for editing and viewing frame recognizers.",
1245 "frame recognizer [<sub-command-options>] ") {
1269#pragma mark CommandObjectMultiwordFrame
1276 "Commands for selecting and "
1277 "examining the current "
1278 "thread's stack frames.",
1279 "frame <subcommand> [<subcommand-options>]") {
1288#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 lldb::ValueObjectSP GetValueObjectForFrameVariable(const lldb::VariableSP &variable_sp, lldb::DynamicValueType use_dynamic)
Create a ValueObject for a given Variable in this StackFrame.
virtual VariableList * GetVariableList(bool get_file_globals, bool include_synthetic_vars, Status *error_ptr)
Retrieve the list of variables whose scope either:
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.
constexpr bool IsSyntheticValueType(lldb::ValueType vt)
Return true if vt represents a synthetic value, false if not.
std::vector< OptionArgElement > OptionElementVector
constexpr lldb::ValueType GetBaseValueType(lldb::ValueType vt)
Get the base value type - for when we don't care if the value is synthetic or not,...
@ 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)