diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 11:09:23 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 11:09:23 +0000 |
commit | f73363f1dd94996356cefbf24388f561891acf0b (patch) | |
tree | e3c31248bdb36eaec5fd833490d4278162dba2a0 /source/Commands/CommandObjectThread.cpp | |
parent | 160ee69dd7ae18978f4068116777639ea98dc951 (diff) |
Notes
Diffstat (limited to 'source/Commands/CommandObjectThread.cpp')
-rw-r--r-- | source/Commands/CommandObjectThread.cpp | 83 |
1 files changed, 42 insertions, 41 deletions
diff --git a/source/Commands/CommandObjectThread.cpp b/source/Commands/CommandObjectThread.cpp index b68aa920b582..3be559963df1 100644 --- a/source/Commands/CommandObjectThread.cpp +++ b/source/Commands/CommandObjectThread.cpp @@ -21,6 +21,7 @@ #include "lldb/Host/StringConvert.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/CommandReturnObject.h" +#include "lldb/Interpreter/OptionArgParser.h" #include "lldb/Interpreter/Options.h" #include "lldb/Symbol/CompileUnit.h" #include "lldb/Symbol/Function.h" @@ -103,8 +104,8 @@ public: } // Use tids instead of ThreadSPs to prevent deadlocking problems which - // result from JIT-ing - // code while iterating over the (locked) ThreadSP list. + // result from JIT-ing code while iterating over the (locked) ThreadSP + // list. std::vector<lldb::tid_t> tids; if (all_threads || m_unique_stacks) { @@ -195,11 +196,10 @@ protected: // // If you return false, the iteration will stop, otherwise it will proceed. // The result is set to m_success_return (defaults to - // eReturnStatusSuccessFinishResult) before the iteration, - // so you only need to set the return status in HandleOneThread if you want to - // indicate an error. - // If m_add_return is true, a blank line will be inserted between each of the - // listings (except the last one.) + // eReturnStatusSuccessFinishResult) before the iteration, so you only need + // to set the return status in HandleOneThread if you want to indicate an + // error. If m_add_return is true, a blank line will be inserted between each + // of the listings (except the last one.) virtual bool HandleOneThread(lldb::tid_t, CommandReturnObject &result) = 0; @@ -290,7 +290,7 @@ public: case 'e': { bool success; m_extended_backtrace = - Args::StringToBoolean(option_arg, false, &success); + OptionArgParser::ToBoolean(option_arg, false, &success); if (!success) error.SetErrorStringWithFormat( "invalid boolean value for option '%c'", short_option); @@ -447,7 +447,8 @@ public: switch (short_option) { case 'a': { bool success; - bool avoid_no_debug = Args::StringToBoolean(option_arg, true, &success); + bool avoid_no_debug = + OptionArgParser::ToBoolean(option_arg, true, &success); if (!success) error.SetErrorStringWithFormat( "invalid boolean value for option '%c'", short_option); @@ -459,7 +460,8 @@ public: case 'A': { bool success; - bool avoid_no_debug = Args::StringToBoolean(option_arg, true, &success); + bool avoid_no_debug = + OptionArgParser::ToBoolean(option_arg, true, &success); if (!success) error.SetErrorStringWithFormat( "invalid boolean value for option '%c'", short_option); @@ -483,7 +485,7 @@ public: case 'm': { OptionEnumValueElement *enum_values = GetDefinitions()[option_idx].enum_values; - m_run_mode = (lldb::RunMode)Args::StringToOptionEnum( + m_run_mode = (lldb::RunMode)OptionArgParser::ToOptionEnum( option_arg, enum_values, eOnlyDuringStepping, error); } break; @@ -644,8 +646,7 @@ protected: const lldb::RunMode stop_other_threads = m_options.m_run_mode; // This is a bit unfortunate, but not all the commands in this command - // object support - // only while stepping, so I use the bool for them. + // object support only while stepping, so I use the bool for them. bool bool_stop_other_threads; if (m_options.m_run_mode == eAllThreads) bool_stop_other_threads = false; @@ -750,8 +751,8 @@ protected: } // If we got a new plan, then set it to be a master plan (User level Plans - // should be master plans - // so that they can be interruptible). Then resume the process. + // should be master plans so that they can be interruptible). Then resume + // the process. if (new_plan_sp) { new_plan_sp->SetIsMasterPlan(true); @@ -782,11 +783,10 @@ protected: } // There is a race condition where this thread will return up the call - // stack to the main command handler - // and show an (lldb) prompt before HandlePrivateEvent (from - // PrivateStateThread) has - // a chance to call PushProcessIOHandler(). - process->SyncIOHandler(iohandler_id, 2000); + // stack to the main command handler and show an (lldb) prompt before + // HandlePrivateEvent (from PrivateStateThread) has a chance to call + // PushProcessIOHandler(). + process->SyncIOHandler(iohandler_id, std::chrono::seconds(2)); if (synchronous_execution) { // If any state changed events had anything to say, add that to the @@ -867,9 +867,9 @@ public: (state == eStateSuspended)) { const size_t argc = command.GetArgumentCount(); if (argc > 0) { - // These two lines appear at the beginning of both blocks in - // this if..else, but that is because we need to release the - // lock before calling process->Resume below. + // These two lines appear at the beginning of both blocks in this + // if..else, but that is because we need to release the lock before + // calling process->Resume below. std::lock_guard<std::recursive_mutex> guard( process->GetThreadList().GetMutex()); const uint32_t num_threads = process->GetThreadList().GetSize(); @@ -928,9 +928,9 @@ public: process->GetID()); } } else { - // These two lines appear at the beginning of both blocks in - // this if..else, but that is because we need to release the - // lock before calling process->Resume below. + // These two lines appear at the beginning of both blocks in this + // if..else, but that is because we need to release the lock before + // calling process->Resume below. std::lock_guard<std::recursive_mutex> guard( process->GetThreadList().GetMutex()); const uint32_t num_threads = process->GetThreadList().GetSize(); @@ -1030,7 +1030,7 @@ public: switch (short_option) { case 'a': { - lldb::addr_t tmp_addr = Args::StringToAddress( + lldb::addr_t tmp_addr = OptionArgParser::ToAddress( execution_context, option_arg, LLDB_INVALID_ADDRESS, &error); if (error.Success()) m_until_addrs.push_back(tmp_addr); @@ -1052,7 +1052,7 @@ public: case 'm': { OptionEnumValueElement *enum_values = GetDefinitions()[option_idx].enum_values; - lldb::RunMode run_mode = (lldb::RunMode)Args::StringToOptionEnum( + lldb::RunMode run_mode = (lldb::RunMode)OptionArgParser::ToOptionEnum( option_arg, enum_values, eOnlyDuringStepping, error); if (error.Success()) { @@ -1192,8 +1192,8 @@ protected: ThreadPlanSP new_plan_sp; if (frame->HasDebugInformation()) { - // Finally we got here... Translate the given line number to a bunch of - // addresses: + // Finally we got here... Translate the given line number to a bunch + // of addresses: SymbolContext sc(frame->GetSymbolContext(eSymbolContextCompUnit)); LineTable *line_table = nullptr; if (sc.comp_unit) @@ -1272,10 +1272,9 @@ protected: abort_other_plans, &address_list.front(), address_list.size(), m_options.m_stop_others, m_options.m_frame_idx); // User level plans should be master plans so they can be interrupted - // (e.g. by hitting a breakpoint) - // and other plans executed by the user (stepping around the breakpoint) - // and then a "continue" - // will resume the original plan. + // (e.g. by hitting a breakpoint) and other plans executed by the user + // (stepping around the breakpoint) and then a "continue" will resume + // the original plan. new_plan_sp->SetIsMasterPlan(true); new_plan_sp->SetOkayToDiscard(false); } else { @@ -1541,7 +1540,8 @@ public: switch (short_option) { case 'x': { bool success; - bool tmp_value = Args::StringToBoolean(option_arg, false, &success); + bool tmp_value = + OptionArgParser::ToBoolean(option_arg, false, &success); if (success) m_from_expression = tmp_value; else { @@ -1603,12 +1603,13 @@ public: Options *GetOptions() override { return &m_options; } protected: - bool DoExecute(const char *command, CommandReturnObject &result) override { + bool DoExecute(llvm::StringRef command, + CommandReturnObject &result) override { // I am going to handle this by hand, because I don't want you to have to // say: // "thread return -- -5". - if (command[0] == '-' && command[1] == 'x') { - if (command && command[2] != '\0') + if (command.startswith("-x")) { + if (command.size() != 2U) result.AppendWarning("Return values ignored when returning from user " "called expressions"); @@ -1645,7 +1646,7 @@ protected: return false; } - if (command && command[0] != '\0') { + if (!command.empty()) { Target *target = m_exe_ctx.GetTargetPtr(); EvaluateExpressionOptions options; @@ -1737,8 +1738,8 @@ public: return Status("invalid line offset: '%s'.", option_arg.str().c_str()); break; case 'a': - m_load_addr = Args::StringToAddress(execution_context, option_arg, - LLDB_INVALID_ADDRESS, &error); + m_load_addr = OptionArgParser::ToAddress(execution_context, option_arg, + LLDB_INVALID_ADDRESS, &error); break; case 'r': m_force = true; |