diff options
| author | Sean Callanan <scallanan@apple.com> | 2014-02-28 22:27:53 +0000 |
|---|---|---|
| committer | Sean Callanan <scallanan@apple.com> | 2014-02-28 22:27:53 +0000 |
| commit | 866e91c9d44428b41089932506ab985a571ca0e1 (patch) | |
| tree | 2da4e9dda29ea1484cdd097df995f8675c8c98b2 /lldb/source/DataFormatters | |
| parent | 525a21237927b95f1afc8205c5e06388e145c696 (diff) | |
| download | bcm5719-llvm-866e91c9d44428b41089932506ab985a571ca0e1.tar.gz bcm5719-llvm-866e91c9d44428b41089932506ab985a571ca0e1.zip | |
Better error reporting when a variable can't be
read during materialization. First of all, report
if we can't read the data for some reason. Second,
consult the ValueObject's error and report that if
there's some problem.
<rdar://problem/16074201>
llvm-svn: 202552
Diffstat (limited to 'lldb/source/DataFormatters')
| -rw-r--r-- | lldb/source/DataFormatters/CXXFormatterFunctions.cpp | 28 | ||||
| -rw-r--r-- | lldb/source/DataFormatters/LibCxxList.cpp | 6 | ||||
| -rw-r--r-- | lldb/source/DataFormatters/LibCxxMap.cpp | 8 | ||||
| -rw-r--r-- | lldb/source/DataFormatters/LibCxxUnorderedMap.cpp | 5 | ||||
| -rw-r--r-- | lldb/source/DataFormatters/TypeFormat.cpp | 17 |
5 files changed, 53 insertions, 11 deletions
diff --git a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp index 136c8c51e66..04f090dd15b 100644 --- a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp +++ b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp @@ -576,7 +576,11 @@ bool lldb_private::formatters::Char16SummaryProvider (ValueObject& valobj, Stream& stream) { DataExtractor data; - valobj.GetData(data); + Error error; + valobj.GetData(data, error); + + if (error.Fail()) + return false; std::string value; valobj.GetValueAsCString(lldb::eFormatUnicode16, value); @@ -590,7 +594,11 @@ bool lldb_private::formatters::Char32SummaryProvider (ValueObject& valobj, Stream& stream) { DataExtractor data; - valobj.GetData(data); + Error error; + valobj.GetData(data, error); + + if (error.Fail()) + return false; std::string value; valobj.GetValueAsCString(lldb::eFormatUnicode32, value); @@ -604,7 +612,11 @@ bool lldb_private::formatters::WCharSummaryProvider (ValueObject& valobj, Stream& stream) { DataExtractor data; - valobj.GetData(data); + Error error; + valobj.GetData(data, error); + + if (error.Fail()) + return false; clang::ASTContext* ast = valobj.GetClangType().GetASTContext(); @@ -1144,7 +1156,10 @@ lldb_private::formatters::NSAttributedStringSummaryProvider (ValueObject& valobj if (!child_ptr_sp) return false; DataExtractor data; - child_ptr_sp->GetData(data); + Error error; + child_ptr_sp->GetData(data, error); + if (error.Fail()) + return false; ValueObjectSP child_sp(child_ptr_sp->CreateValueObjectFromData("string_data", data, exe_ctx, type)); child_sp->GetValueAsUnsigned(0); if (child_sp) @@ -1218,7 +1233,10 @@ lldb_private::formatters::ObjCSELSummaryProvider (ValueObject& valobj, Stream& s else { DataExtractor data; - valobj.GetData(data); + Error error; + valobj.GetData(data, error); + if (error.Fail()) + return false; valobj_sp = ValueObject::CreateValueObjectFromData("text", data, exe_ctx, charstar); } diff --git a/lldb/source/DataFormatters/LibCxxList.cpp b/lldb/source/DataFormatters/LibCxxList.cpp index 9ec8a785598..e542a98103f 100644 --- a/lldb/source/DataFormatters/LibCxxList.cpp +++ b/lldb/source/DataFormatters/LibCxxList.cpp @@ -257,7 +257,11 @@ lldb_private::formatters::LibcxxStdListSyntheticFrontEnd::GetChildAtIndex (size_ return lldb::ValueObjectSP(); // we need to copy current_sp into a new object otherwise we will end up with all items named __value_ DataExtractor data; - current_sp->GetData(data); + Error error; + current_sp->GetData(data, error); + if (error.Fail()) + return lldb::ValueObjectSP(); + StreamString name; name.Printf("[%zu]",idx); return (m_children[idx] = ValueObject::CreateValueObjectFromData(name.GetData(), data, m_backend.GetExecutionContextRef(), m_element_type)); diff --git a/lldb/source/DataFormatters/LibCxxMap.cpp b/lldb/source/DataFormatters/LibCxxMap.cpp index 5daa40f15f3..7d5c94f38e8 100644 --- a/lldb/source/DataFormatters/LibCxxMap.cpp +++ b/lldb/source/DataFormatters/LibCxxMap.cpp @@ -366,7 +366,13 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetChildAtIndex (size_t // at this point we have a valid // we need to copy current_sp into a new object otherwise we will end up with all items named __value_ DataExtractor data; - iterated_sp->GetData(data); + Error error; + iterated_sp->GetData(data, error); + if (error.Fail()) + { + m_tree = NULL; + return lldb::ValueObjectSP(); + } StreamString name; name.Printf("[%zu]",idx); return (m_children[idx] = ValueObject::CreateValueObjectFromData(name.GetData(), data, m_backend.GetExecutionContextRef(), m_element_type)); diff --git a/lldb/source/DataFormatters/LibCxxUnorderedMap.cpp b/lldb/source/DataFormatters/LibCxxUnorderedMap.cpp index 05b41d0de0c..99cd08e346e 100644 --- a/lldb/source/DataFormatters/LibCxxUnorderedMap.cpp +++ b/lldb/source/DataFormatters/LibCxxUnorderedMap.cpp @@ -83,7 +83,10 @@ lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::GetChildAtInde StreamString stream; stream.Printf("[%zu]",idx); DataExtractor data; - val_hash.first->GetData(data); + Error error; + val_hash.first->GetData(data, error); + if (error.Fail()) + return lldb::ValueObjectSP(); const bool thread_and_frame_only_if_stopped = true; ExecutionContext exe_ctx = val_hash.first->GetExecutionContextRef().Lock(thread_and_frame_only_if_stopped); return val_hash.first->CreateValueObjectFromData(stream.GetData(), diff --git a/lldb/source/DataFormatters/TypeFormat.cpp b/lldb/source/DataFormatters/TypeFormat.cpp index a72f551c741..1648a16dd1b 100644 --- a/lldb/source/DataFormatters/TypeFormat.cpp +++ b/lldb/source/DataFormatters/TypeFormat.cpp @@ -64,7 +64,10 @@ TypeFormatImpl_Format::FormatObject (ValueObject *valobj, const RegisterInfo *reg_info = value.GetRegisterInfo(); if (reg_info) { - valobj->GetData(data); + Error error; + valobj->GetData(data, error); + if (error.Fail()) + return false; StreamString reg_sstr; data.Dump (®_sstr, @@ -105,7 +108,12 @@ TypeFormatImpl_Format::FormatObject (ValueObject *valobj, } } else - valobj->GetData(data); + { + Error error; + valobj->GetData(data, error); + if (error.Fail()) + return false; + } StreamString sstr; clang_type.DumpTypeValue (&sstr, // The stream to use for display @@ -203,7 +211,10 @@ TypeFormatImpl_EnumType::FormatObject (ValueObject *valobj, if (valobj_enum_type.IsValid() == false) return false; DataExtractor data; - valobj->GetData(data); + Error error; + valobj->GetData(data, error); + if (error.Fail()) + return false; ExecutionContext exe_ctx (valobj->GetExecutionContextRef()); StreamString sstr; valobj_enum_type.DumpTypeValue(&sstr, |

