diff options
author | Jim Ingham <jingham@apple.com> | 2012-05-31 20:48:41 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2012-05-31 20:48:41 +0000 |
commit | ce76c62b089956fe3ccad72fd3086ee1432b0210 (patch) | |
tree | 2d1def05f9b4f162d69dc4d1aa3a4ffa2656053a /lldb/source/Commands/CommandObjectThread.cpp | |
parent | cb5d5a571e4fd8432ec335eaff54ef740d89ae9b (diff) | |
download | bcm5719-llvm-ce76c62b089956fe3ccad72fd3086ee1432b0210.tar.gz bcm5719-llvm-ce76c62b089956fe3ccad72fd3086ee1432b0210.zip |
Fix a bunch of thinko's in the command "thread continue".
rdar://problem/11562050
llvm-svn: 157767
Diffstat (limited to 'lldb/source/Commands/CommandObjectThread.cpp')
-rw-r--r-- | lldb/source/Commands/CommandObjectThread.cpp | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/lldb/source/Commands/CommandObjectThread.cpp b/lldb/source/Commands/CommandObjectThread.cpp index b2e4c97cd55..48435134ed3 100644 --- a/lldb/source/Commands/CommandObjectThread.cpp +++ b/lldb/source/Commands/CommandObjectThread.cpp @@ -660,11 +660,26 @@ public: std::vector<uint32_t> resume_thread_indexes; for (uint32_t i=0; i<argc; ++i) { - idx = Args::StringToUInt32 (command.GetArgumentAtIndex(0), LLDB_INVALID_INDEX32); - if (idx < num_threads) - resume_thread_indexes.push_back(idx); + bool success; + const int base = 0; + idx = Args::StringToUInt32 (command.GetArgumentAtIndex(i), LLDB_INVALID_INDEX32, base, &success); + if (!success) + { + result.AppendErrorWithFormat ("invalid value for thread index: %s.", command.GetArgumentAtIndex(i)); + result.SetStatus (eReturnStatusFailed); + return false; + } + else if (process->GetThreadList().FindThreadByIndexID(idx)) + { + if (find(resume_thread_indexes.begin(), resume_thread_indexes.end(), idx) == resume_thread_indexes.end()) + resume_thread_indexes.push_back(idx); + } else - result.AppendWarningWithFormat("Thread index %u out of range.\n", idx); + { + result.AppendErrorWithFormat("thread index %u out of range.\n", idx); + result.SetStatus (eReturnStatusFailed); + return false; + } } if (resume_thread_indexes.empty()) @@ -675,13 +690,24 @@ public: } else { - result.AppendMessage ("Resuming thread "); + if (resume_thread_indexes.size() == 1) + result.AppendMessageWithFormat ("Resuming thread: "); + else + result.AppendMessageWithFormat ("Resuming threads: "); + for (idx=0; idx<num_threads; ++idx) { Thread *thread = process->GetThreadList().FindThreadByIndexID(idx).get(); - if (find(resume_thread_indexes.begin(), resume_thread_indexes.end(), idx) != resume_thread_indexes.end()) + std::vector<uint32_t>::iterator this_thread_pos = find(resume_thread_indexes.begin(), resume_thread_indexes.end(), thread->GetIndexID()); + + if (this_thread_pos != resume_thread_indexes.end()) { - result.AppendMessageWithFormat ("%u ", idx); + resume_thread_indexes.erase(this_thread_pos); + if (resume_thread_indexes.size() > 0) + result.AppendMessageWithFormat ("%u, ", thread->GetIndexID()); + else + result.AppendMessageWithFormat ("%u ", thread->GetIndexID()); + thread->SetResumeState (eStateRunning); } else |