From dea8cb4fe314fb772706e033e50c3258210007f5 Mon Sep 17 00:00:00 2001 From: Greg Clayton Date: Wed, 29 Jun 2011 22:09:02 +0000 Subject: Added support for finding and global variables in the SBTarget and SBModule level in the public API. Also modified the ValueObject values to be able to display global variables without having a valid running process. The globals will read themselves from the object file section data if there is no process, and from the process if there is one. Also fixed an issue where modifications for dynamic types could cause child values of ValueObjects to not show up if the value was unable to evaluate itself (children of NULL pointer objects). llvm-svn: 134102 --- lldb/source/API/SBModule.cpp | 35 ++++++++++++++++++++++++++++++ lldb/source/API/SBTarget.cpp | 47 +++++++++++++++++++++++++++++++++++------ lldb/source/API/SBValueList.cpp | 44 ++++++++++++++++++++++++++------------ 3 files changed, 107 insertions(+), 19 deletions(-) (limited to 'lldb/source/API') diff --git a/lldb/source/API/SBModule.cpp b/lldb/source/API/SBModule.cpp index 0c4eba43e56..53172f349ca 100644 --- a/lldb/source/API/SBModule.cpp +++ b/lldb/source/API/SBModule.cpp @@ -15,6 +15,10 @@ #include "lldb/Core/Module.h" #include "lldb/Core/Log.h" #include "lldb/Core/StreamString.h" +#include "lldb/Core/ValueObjectList.h" +#include "lldb/Core/ValueObjectVariable.h" +#include "lldb/Symbol/VariableList.h" +#include "lldb/Target/Target.h" using namespace lldb; using namespace lldb_private; @@ -307,3 +311,34 @@ SBModule::FindFunctions (const char *name, return 0; } + +SBValueList +SBModule::FindGlobalVariables (SBTarget &target, const char *name, uint32_t max_matches) +{ + SBValueList sb_value_list; + if (m_opaque_sp) + { + VariableList variable_list; + const uint32_t match_count = m_opaque_sp->FindGlobalVariables (ConstString (name), + false, + max_matches, + variable_list); + + if (match_count > 0) + { + ValueObjectList &value_object_list = sb_value_list.ref(); + for (uint32_t i=0; iGetImages().FindGlobalVariables (ConstString (name), + append, + max_matches, + variable_list); + + if (match_count > 0) + { + ExecutionContextScope *exe_scope = m_opaque_sp->GetProcessSP().get(); + if (exe_scope == NULL) + exe_scope = m_opaque_sp.get(); + ValueObjectList &value_object_list = sb_value_list.ref(); + for (uint32_t i=0; i() { return m_opaque_ap.get(); } -lldb_private::ValueObjectList & +ValueObjectList & SBValueList::operator*() { return *m_opaque_ap; } -const lldb_private::ValueObjectList * +const ValueObjectList * SBValueList::operator->() const { return m_opaque_ap.get(); } -const lldb_private::ValueObjectList & +const ValueObjectList & SBValueList::operator*() const { return *m_opaque_ap; @@ -121,11 +121,21 @@ SBValueList::Append (lldb::ValueObjectSP& val_obj_sp) } } +void +SBValueList::Append (const lldb::SBValueList& value_list) +{ + if (value_list.IsValid()) + { + CreateIfNeeded (); + m_opaque_ap->Append (*value_list); + } +} + SBValue SBValueList::GetValueAtIndex (uint32_t idx) const { - LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); //if (log) // log->Printf ("SBValueList::GetValueAtIndex (uint32_t idx) idx = %d", idx); @@ -148,7 +158,7 @@ SBValueList::GetValueAtIndex (uint32_t idx) const uint32_t SBValueList::GetSize () const { - LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); //if (log) // log->Printf ("SBValueList::GetSize ()"); @@ -180,9 +190,17 @@ SBValueList::FindValueObjectByUID (lldb::user_id_t uid) return sb_value; } -lldb_private::ValueObjectList * +ValueObjectList * SBValueList::get () { return m_opaque_ap.get(); } +ValueObjectList & +SBValueList::ref () +{ + CreateIfNeeded(); + return *m_opaque_ap.get(); +} + + -- cgit v1.2.3