diff options
author | Greg Clayton <gclayton@apple.com> | 2012-09-27 22:26:11 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2012-09-27 22:26:11 +0000 |
commit | b5f0feabae967ab27efa82ad1a54536fc5671d22 (patch) | |
tree | 9b5a1b5aaf6379c843d554f81819972fae0d804d /lldb/source/Interpreter/OptionValueUUID.cpp | |
parent | daa1c74da8e30a2c2dfab0ad64ade8f2cd25a773 (diff) | |
download | bcm5719-llvm-b5f0feabae967ab27efa82ad1a54536fc5671d22.tar.gz bcm5719-llvm-b5f0feabae967ab27efa82ad1a54536fc5671d22.zip |
Wrapped up the work I am going to do for now for the "add-dsym" or "target symfile add" command.
We can now do:
Specify a path to a debug symbols file:
(lldb) add-dsym <path-to-dsym>
Go and download the dSYM file for the "libunc.dylib" module in your target:
(lldb) add-dsym --shlib libunc.dylib
Go and download the dSYM given a UUID:
(lldb) add-dsym --uuid <UUID>
Go and download the dSYM file for the current frame:
(lldb) add-dsym --frame
llvm-svn: 164806
Diffstat (limited to 'lldb/source/Interpreter/OptionValueUUID.cpp')
-rw-r--r-- | lldb/source/Interpreter/OptionValueUUID.cpp | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/lldb/source/Interpreter/OptionValueUUID.cpp b/lldb/source/Interpreter/OptionValueUUID.cpp index 03a5684b1d0..4db5a99ca3a 100644 --- a/lldb/source/Interpreter/OptionValueUUID.cpp +++ b/lldb/source/Interpreter/OptionValueUUID.cpp @@ -13,7 +13,10 @@ // C++ Includes // Other libraries and framework includes // Project includes +#include "lldb/Core/Module.h" #include "lldb/Core/Stream.h" +#include "lldb/Core/StringList.h" +#include "lldb/Interpreter/CommandInterpreter.h" using namespace lldb; using namespace lldb_private; @@ -45,7 +48,7 @@ OptionValueUUID::SetValueFromCString (const char *value_cstr, case eVarSetOperationReplace: case eVarSetOperationAssign: { - if (m_uuid.SetfromCString(value_cstr) == 0) + if (m_uuid.SetFromCString(value_cstr) == 0) error.SetErrorStringWithFormat ("invalid uuid string value '%s'", value_cstr); else m_value_was_set = true; @@ -68,3 +71,50 @@ OptionValueUUID::DeepCopy () const { return OptionValueSP(new OptionValueUUID(*this)); } + +size_t +OptionValueUUID::AutoComplete (CommandInterpreter &interpreter, + const char *s, + int match_start_point, + int max_return_elements, + bool &word_complete, + StringList &matches) +{ + word_complete = false; + matches.Clear(); + ExecutionContext exe_ctx(interpreter.GetExecutionContext()); + Target *target = exe_ctx.GetTargetPtr(); + if (target) + { + const size_t num_modules = target->GetImages().GetSize(); + if (num_modules > 0) + { + char uuid_cstr[64]; + UUID::ValueType uuid_bytes; + const size_t num_bytes_decoded = UUID::DecodeUUIDBytesFromCString(s, uuid_bytes, NULL); + for (size_t i=0; i<num_modules; ++i) + { + ModuleSP module_sp (target->GetImages().GetModuleAtIndex(i)); + if (module_sp) + { + const UUID &module_uuid = module_sp->GetUUID(); + if (module_uuid.IsValid()) + { + bool add_uuid = false; + if (num_bytes_decoded == 0) + add_uuid = true; + else + add_uuid = ::memcmp(module_uuid.GetBytes(), uuid_bytes, num_bytes_decoded) == 0; + if (add_uuid) + { + if (module_uuid.GetAsCString(uuid_cstr, sizeof(uuid_cstr))) + matches.AppendString(uuid_cstr); + } + } + } + } + } + } + return matches.GetSize(); +} + |