diff options
| author | Ed Maste <emaste@FreeBSD.org> | 2013-11-06 16:48:53 +0000 | 
|---|---|---|
| committer | Ed Maste <emaste@FreeBSD.org> | 2013-11-06 16:48:53 +0000 | 
| commit | f21a844f60ae6c74fcf1fddca32461acce3c1ee0 (patch) | |
| tree | 56d79f94966870db1cecd65a7264510a25fd1cba /source/Commands/CommandObjectExpression.cpp | |
| parent | 37d22554be9f5a677dad2a95b7ef22fe59c66a8a (diff) | |
Notes
Diffstat (limited to 'source/Commands/CommandObjectExpression.cpp')
| -rw-r--r-- | source/Commands/CommandObjectExpression.cpp | 50 | 
1 files changed, 41 insertions, 9 deletions
| diff --git a/source/Commands/CommandObjectExpression.cpp b/source/Commands/CommandObjectExpression.cpp index da472d17331b0..6d44f71b8d958 100644 --- a/source/Commands/CommandObjectExpression.cpp +++ b/source/Commands/CommandObjectExpression.cpp @@ -19,6 +19,7 @@  #include "lldb/Core/Value.h"  #include "lldb/Core/InputReader.h"  #include "lldb/Core/ValueObjectVariable.h" +#include "lldb/DataFormatters/ValueObjectPrinter.h"  #include "lldb/Expression/ClangExpressionVariable.h"  #include "lldb/Expression/ClangUserExpression.h"  #include "lldb/Expression/ClangFunction.h" @@ -49,13 +50,22 @@ CommandObjectExpression::CommandOptions::~CommandOptions ()  {  } +static OptionEnumValueElement g_description_verbosity_type[] = +{ +    { eLanguageRuntimeDescriptionDisplayVerbosityCompact,      "compact",       "Only show the description string"}, +    { eLanguageRuntimeDescriptionDisplayVerbosityFull,         "full",          "Show the full output, including persistent variable's name and type"}, +    { 0, NULL, NULL } +}; +  OptionDefinition  CommandObjectExpression::CommandOptions::g_option_table[] =  { -    { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "all-threads",        'a', required_argument, NULL, 0, eArgTypeBoolean,    "Should we run all threads if the execution doesn't complete on one thread."}, -    { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "ignore-breakpoints", 'i', required_argument, NULL, 0, eArgTypeBoolean,    "Ignore breakpoint hits while running expressions"}, -    { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "timeout",            't', required_argument, NULL, 0, eArgTypeUnsignedInteger,  "Timeout value (in microseconds) for running the expression."}, -    { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "unwind-on-error",    'u', required_argument, NULL, 0, eArgTypeBoolean,    "Clean up program state if the expression causes a crash, or raises a signal.  Note, unlike gdb hitting a breakpoint is controlled by another option (-i)."}, +    { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "all-threads",        'a', OptionParser::eRequiredArgument, NULL, 0, eArgTypeBoolean,    "Should we run all threads if the execution doesn't complete on one thread."}, +    { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "ignore-breakpoints", 'i', OptionParser::eRequiredArgument, NULL, 0, eArgTypeBoolean,    "Ignore breakpoint hits while running expressions"}, +    { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "timeout",            't', OptionParser::eRequiredArgument, NULL, 0, eArgTypeUnsignedInteger,  "Timeout value (in microseconds) for running the expression."}, +    { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "unwind-on-error",    'u', OptionParser::eRequiredArgument, NULL, 0, eArgTypeBoolean,    "Clean up program state if the expression causes a crash, or raises a signal.  Note, unlike gdb hitting a breakpoint is controlled by another option (-i)."}, +    { LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "debug",              'g', OptionParser::eNoArgument      , NULL, 0, eArgTypeNone,       "When specified, debug the JIT code by setting a breakpoint on the first instruction and forcing breakpoints to not be ignored (-i0) and no unwinding to happen on error (-u0)."}, +    { LLDB_OPT_SET_1, false, "description-verbosity", 'v', OptionParser::eOptionalArgument, g_description_verbosity_type, 0, eArgTypeDescriptionVerbosity,        "How verbose should the output of this expression be, if the object description is asked for."},  }; @@ -127,6 +137,24 @@ CommandObjectExpression::CommandOptions::SetOptionValue (CommandInterpreter &int                  error.SetErrorStringWithFormat("could not convert \"%s\" to a boolean value.", option_arg);              break;          } +             +    case 'v': +        if (!option_arg) +        { +            m_verbosity = eLanguageRuntimeDescriptionDisplayVerbosityFull; +            break; +        } +        m_verbosity = (LanguageRuntimeDescriptionDisplayVerbosity) Args::StringToOptionEnum(option_arg, g_option_table[option_idx].enum_values, 0, error); +        if (!error.Success()) +            error.SetErrorStringWithFormat ("unrecognized value for description-verbosity '%s'", option_arg); +        break; +     +    case 'g': +        debug = true; +        unwind_on_error = false; +        ignore_breakpoints = false; +        break; +      default:          error.SetErrorStringWithFormat("invalid short option character '%c'", short_option);          break; @@ -153,6 +181,8 @@ CommandObjectExpression::CommandOptions::OptionParsingStarting (CommandInterpret      show_summary = true;      try_all_threads = true;      timeout = 0; +    debug = false; +    m_verbosity = eLanguageRuntimeDescriptionDisplayVerbosityCompact;  }  const OptionDefinition* @@ -339,7 +369,10 @@ CommandObjectExpression::EvaluateExpression          .SetKeepInMemory(keep_in_memory)          .SetUseDynamic(m_varobj_options.use_dynamic)          .SetRunOthers(m_command_options.try_all_threads) -        .SetTimeoutUsec(m_command_options.timeout); +        .SetDebug(m_command_options.debug); +         +        if (m_command_options.timeout > 0) +            options.SetTimeoutUsec(m_command_options.timeout);          exe_results = target->EvaluateExpression (expr,                                                     exe_ctx.GetFramePtr(), @@ -357,11 +390,10 @@ CommandObjectExpression::EvaluateExpression                      if (format != eFormatDefault)                          result_valobj_sp->SetFormat (format); -                    ValueObject::DumpValueObjectOptions options(m_varobj_options.GetAsDumpOptions(true,format)); +                    DumpValueObjectOptions options(m_varobj_options.GetAsDumpOptions(m_command_options.m_verbosity,format)); -                    ValueObject::DumpValueObject (*(output_stream), -                                                  result_valobj_sp.get(),   // Variable object to dump -                                                  options); +                    result_valobj_sp->Dump(*output_stream,options); +                                          if (result)                          result->SetStatus (eReturnStatusSuccessFinishResult);                  } | 
