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) {
 
 
  282      if (*
m_options.relative_frame_offset == 1 ||
 
  283          *
m_options.relative_frame_offset == -1) {
 
  284        uint32_t candidate_idx = frame_idx;
 
  285        const unsigned max_depth = 12;
 
  286        for (
unsigned num_try = 0; num_try < max_depth; ++num_try) {
 
  287          if (candidate_idx == 0 && *
m_options.relative_frame_offset == -1) {
 
  291          candidate_idx += *
m_options.relative_frame_offset;
 
  292          if (
auto candidate_sp = thread->GetStackFrameAtIndex(candidate_idx)) {
 
  293            if (candidate_sp->IsHidden())
 
  302          m_options.relative_frame_offset = candidate_idx - frame_idx;
 
  305      if (*
m_options.relative_frame_offset < 0) {
 
  306        if (
static_cast<int32_t
>(frame_idx) >=
 
  308          frame_idx += *
m_options.relative_frame_offset;
 
  310          if (frame_idx == 0) {
 
  313            result.
AppendError(
"already at the bottom of the stack");
 
  318      } 
else if (*
m_options.relative_frame_offset > 0) {
 
  323        const uint32_t frame_requested =
 
  324            frame_idx + *
m_options.relative_frame_offset;
 
  325        StackFrameSP frame_sp = thread->GetStackFrameAtIndex(frame_requested);
 
  327          frame_idx = frame_requested;
 
  330          const uint32_t num_frames = thread->GetStackFrameCount();
 
  331          if (
static_cast<int32_t
>(num_frames - frame_idx) >
 
  333          frame_idx += *
m_options.relative_frame_offset;
 
  335            if (frame_idx == num_frames - 1) {
 
  338              result.
AppendError(
"already at the top of the stack");
 
  341              frame_idx = num_frames - 1;
 
  348            "too many arguments; expected frame-index, saw '%s'.\n",
 
  358        if (command[0].ref().getAsInteger(0, frame_idx)) {
 
  371    bool success = thread->SetSelectedFrameByIndexNoisily(
 
 
 
  385#pragma mark CommandObjectFrameVariable 
  391            interpreter, 
"frame variable",
 
  392            "Show variables for the current stack frame. Defaults to all " 
  393            "arguments and local variables in scope. Names of argument, " 
  394            "local, file static and file global variables can be specified.",
 
  396            eCommandRequiresFrame | eCommandTryTargetAPILock |
 
  397                eCommandProcessMustBeLaunched | eCommandProcessMustBePaused |
 
  398                eCommandRequiresProcess),
 
  403Children of aggregate variables can be specified such as 'var->child.x'.  In 
  404'frame variable', the operators -> and [] do not invoke operator overloads if 
  405they exist, but directly access the specified element.  If you want to trigger 
  406operator overloads use the expression command to print the variable instead. 
  408It is worth noting that except for overloaded operators, when printing local 
  409variables 'expr local_var' and 'frame var local_var' produce the same results. 
  410However, 'frame variable' is more efficient, since it uses debug information and 
  411memory reads directly, rather than parsing and evaluating an expression, which 
  412may even involve JITing and running code in the target program.)"); 
 
  432      return llvm::StringRef();
 
  434    switch (var_sp->GetScope()) {
 
 
  449    return llvm::StringRef();
 
 
  471    llvm_unreachable(
"Unexpected scope value");
 
  480  std::optional<llvm::ArrayRef<VariableSP>>
 
  484    bool any_matches = 
false;
 
  485    const size_t previous_num_vars = matches.
GetSize();
 
 
  495      return matches.
toArrayRef().drop_front(previous_num_vars);
 
  499  void DoExecute(Args &command, CommandReturnObject &result)
 override {
 
  502    StackFrame *frame = 
m_exe_ctx.GetFramePtr();
 
  515    VariableList *variable_list =
 
  518    if (
error.Fail() && (!variable_list || variable_list->
GetSize() == 0)) {
 
  530      summary_format_sp = std::make_shared<StringSummaryFormat>(
 
  531          TypeSummaryImpl::Flags(),
 
  538    const SymbolContext &sym_ctx =
 
  545      options.SetFormat(format);
 
  547      if (!command.
empty()) {
 
  548        VariableList regex_var_list;
 
  552        for (
auto &entry : command) {
 
  554            llvm::StringRef name_str = entry.ref();
 
  557              std::optional<llvm::ArrayRef<VariableSP>> results =
 
  561                    "no variables matched the regular expression '%s'.",
 
  571                  std::string scope_string;
 
  575                  if (!scope_string.empty())
 
  579                      var_sp->GetDeclaration().GetFile()) {
 
  580                    bool show_fullpaths = 
false;
 
  581                    bool show_module = 
true;
 
  582                    if (var_sp->DumpDeclaration(&s, show_fullpaths,
 
  587                  if (llvm::Error 
error = valobj_sp->Dump(strm, options))
 
  592              if (llvm::Error err = regex.
GetError())
 
  593                result.
AppendError(llvm::toString(std::move(err)));
 
  596                    "unknown regex error when compiling '%s'", entry.c_str());
 
  602            uint32_t expr_path_options =
 
  613              std::string scope_string;
 
  617              if (!scope_string.empty())
 
  620                  var_sp->GetDeclaration().GetFile()) {
 
  621                var_sp->GetDeclaration().DumpStopContext(&s, 
false);
 
  625              options.SetFormat(format);
 
  626              options.SetVariableFormatDisplayLanguage(
 
  627                  valobj_sp->GetPreferredDisplayLanguage());
 
  630              options.SetRootValueObjectName(
 
  631                  valobj_sp->GetParent() ? entry.c_str() : 
nullptr);
 
  632              if (llvm::Error 
error = valobj_sp->Dump(output_stream, options))
 
  635              if (
auto error_cstr = 
error.AsCString(
nullptr))
 
  639                    "unable to find any variable expression path that matches " 
  647        const size_t num_variables = variable_list->
GetSize();
 
  648        if (num_variables > 0) {
 
  649          for (
size_t i = 0; i < num_variables; i++) {
 
  653            std::string scope_string;
 
  666              if (valobj_sp->IsInScope()) {
 
  667                if (!valobj_sp->GetTargetSP()
 
  668                         ->GetDisplayRuntimeSupportValues() &&
 
  669                    valobj_sp->IsRuntimeSupportValue())
 
  672                if (!scope_string.empty())
 
  676                    var_sp->GetDeclaration().GetFile()) {
 
  677                  var_sp->GetDeclaration().DumpStopContext(&s, 
false);
 
  681                options.SetFormat(format);
 
  682                options.SetVariableFormatDisplayLanguage(
 
  683                    valobj_sp->GetPreferredDisplayLanguage());
 
  684                options.SetRootValueObjectName(
 
  685                    var_sp ? var_sp->GetName().AsCString() : 
nullptr);
 
  686                if (llvm::Error 
error =
 
  700      if (recognized_frame) {
 
  702            recognized_frame->GetRecognizedArguments();
 
  703        if (recognized_arg_list) {
 
  704          for (
auto &rec_value_sp : recognized_arg_list->GetObjects()) {
 
  707            options.SetVariableFormatDisplayLanguage(
 
  708                rec_value_sp->GetPreferredDisplayLanguage());
 
  709            options.SetRootValueObjectName(rec_value_sp->GetName().AsCString());
 
  710            if (llvm::Error 
error =
 
 
 
  735#pragma mark CommandObjectFrameRecognizer 
  737#define LLDB_OPTIONS_frame_recognizer_add 
  738#include "CommandOptions.inc" 
  752      switch (short_option) {
 
  760              "invalid boolean value '%s' passed for -f option",
 
  761              option_arg.str().c_str());
 
  771        m_symbols.push_back(std::string(option_arg));
 
  777        llvm_unreachable(
"Unimplemented option");
 
 
  792      return llvm::ArrayRef(g_frame_recognizer_add_options);
 
 
 
  813                            "Add a new frame recognizer.", nullptr) {
 
  815Frame recognizers allow for retrieving information about special frames based on 
 
  816ABI, arguments or other special properties of that frame, even without source 
  817code or debug info. Currently, one use case is to extract function arguments 
  818that would otherwise be unaccesible, or augment existing arguments. 
  820Adding a custom frame recognizer is possible by implementing a Python class 
  821and using the 'frame recognizer add' command. The Python class should have a 
  822'get_recognized_arguments' method and it will receive an argument of type 
  823lldb.SBFrame representing the current frame that we are trying to recognize. 
  824The method should return a (possibly empty) list of lldb.SBValue objects that 
  825represent the recognized arguments. 
  827An example of a recognizer that retrieves the file descriptor values from libc 
  828functions 'read', 'write' and 'close' follows: 
  830  class LibcFdRecognizer(object): 
  831    def get_recognized_arguments(self, frame): 
  832      if frame.name in ["read", "write", "close"]: 
  833        fd = frame.EvaluateExpression("$arg1").unsigned 
  834        target = frame.thread.process.target 
  835        value = target.CreateValueFromExpression("fd", "(int)%d" % fd) 
  839The file containing this implementation can be imported via 'command script 
  840import' and then we can register this recognizer with 'frame recognizer add'. 
  841It's important to restrict the recognizer to the libc library (which is 
  842libsystem_kernel.dylib on macOS) to avoid matching functions with the same name 
  845(lldb) command script import .../fd_recognizer.py 
  846(lldb) frame recognizer add -l fd_recognizer.LibcFdRecognizer -n read -s libsystem_kernel.dylib 
  848When the program is stopped at the beginning of the 'read' function in libc, we 
  849can view the recognizer arguments in 'frame variable': 
  854* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.3 
  855    frame #0: 0x00007fff06013ca0 libsystem_kernel.dylib`read 
 
  866#if LLDB_ENABLE_PYTHON 
  869        "%s needs a Python class name (-l argument).\n", 
m_cmd_name.c_str());
 
  881        "%s needs at least one symbol name (-n argument).\n",
 
  888        "%s needs only one symbol regular expression (-n argument).\n",
 
  897    result.
AppendWarning(
"The provided class does not exist - please define it " 
  898                         "before attempting to use this frame recognizer");
 
  903          interpreter, 
m_options.m_class_name.c_str()));
 
  905    auto module = std::make_shared<RegularExpression>(m_options.m_module);
 
  907        std::make_shared<RegularExpression>(
m_options.m_symbols.front());
 
  912    auto module = ConstString(m_options.m_module);
 
  913    std::vector<ConstString> symbols(
m_options.m_symbols.begin(),
 
  916        recognizer_sp, module, symbols,
 
 
  929                            "Delete all frame recognizers.", nullptr) {}
 
 
 
  942                       const std::string &module,
 
  943                       llvm::ArrayRef<lldb_private::ConstString> symbols,
 
  946    strm << 
"[disabled] ";
 
  948  strm << name << 
", ";
 
  951    strm << 
"module " << module << 
", ";
 
  953  switch (symbol_mangling) {
 
  954  case Mangled::NamePreference ::ePreferMangled:
 
  955    strm << 
"mangled symbol ";
 
  957  case Mangled::NamePreference ::ePreferDemangled:
 
  958    strm << 
"demangled symbol ";
 
  960  case Mangled::NamePreference ::ePreferDemangledWithoutArguments:
 
  961    strm << 
"demangled (no args) symbol ";
 
  968  llvm::interleaveComma(symbols, strm);
 
 
  976                                      const char *help = 
nullptr,
 
  977                                      const char *syntax = 
nullptr,
 
 
  990        [&request](uint32_t rid, 
bool enabled, std::string rname,
 
  992                   llvm::ArrayRef<lldb_private::ConstString> symbols,
 
  996            rname = 
"(internal)";
 
  999                                 symbol_mangling, regexp);
 
 
 1006                               uint32_t recognizer_id) = 0;
 
 1009    uint32_t recognizer_id;
 
 
 
 1025            interpreter, 
"frame recognizer enable",
 
 1026            "Enable a frame recognizer by id.", nullptr) {
 
 
 1034                       uint32_t recognizer_id)
 override {
 
 1036    if (!recognizer_mgr.SetEnabledForID(recognizer_id, 
true)) {
 
 
 
 1050            interpreter, 
"frame recognizer disable",
 
 1051            "Disable a frame recognizer by id.", nullptr) {
 
 
 1059                       uint32_t recognizer_id)
 override {
 
 1061    if (!recognizer_mgr.SetEnabledForID(recognizer_id, 
false)) {
 
 
 
 1075            interpreter, 
"frame recognizer delete",
 
 1076            "Delete an existing frame recognizer by id.", nullptr) {
 
 
 1084                       uint32_t recognizer_id)
 override {
 
 1086    if (!recognizer_mgr.RemoveRecognizerWithID(recognizer_id)) {
 
 
 
 1099                            "Show a list of active frame recognizers.",
 
 
 1106    bool any_printed = 
false;
 
 1109         &any_printed](uint32_t recognizer_id, 
bool enabled, std::string name,
 
 1110                       std::string module, llvm::ArrayRef<ConstString> symbols,
 
 1115            name = 
"(internal)";
 
 1117          stream << std::to_string(recognizer_id) << 
": ";
 
 1119                                 symbol_mangling, regexp);
 
 
 
 1140            interpreter, 
"frame recognizer info",
 
 1141            "Show which frame recognizer is applied a stack frame (if any).",
 
 
 1151    uint32_t frame_index;
 
 1152    if (!llvm::to_integer(frame_index_str, frame_index)) {
 
 1159    if (process == 
nullptr) {
 
 1164    if (thread == 
nullptr) {
 
 1170          "'%s' takes exactly one frame index argument.\n", 
m_cmd_name.c_str());
 
 1174    StackFrameSP frame_sp = thread->GetStackFrameAtIndex(frame_index);
 
 1184    output_stream.
Printf(
"frame %d ", frame_index);
 
 1186      output_stream << 
"is recognized by ";
 
 1187      output_stream << recognizer->GetName();
 
 1189      output_stream << 
"not recognized by any recognizer";
 
 1191    output_stream.
EOL();
 
 
 
 1200            interpreter, 
"frame recognizer",
 
 1201            "Commands for editing and viewing frame recognizers.",
 
 1202            "frame recognizer [<sub-command-options>] ") {
 
 
 
 1226#pragma mark CommandObjectMultiwordFrame 
 1233                             "Commands for selecting and " 
 1234                             "examining the current " 
 1235                             "thread's stack frames.",
 
 1236                             "frame <subcommand> [<subcommand-options>]") {
 
 1245#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.
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 void AppendError(llvm::StringRef in_string)
const ValueObjectList & GetValueObjectList() const
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={})
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()
@ eExpressionPathOptionCheckPtrVsMember
@ eExpressionPathOptionsInspectAnonymousUnions
@ eExpressionPathOptionsAllowDirectIVarAccess
VariableList * GetVariableList(bool get_file_globals, Status *error_ptr)
Retrieve the list of variables whose scope either:
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.
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
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::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)