diff --git a/lldb/include/lldb/Core/StructuredDataImpl.h b/lldb/include/lldb/Core/StructuredDataImpl.h --- a/lldb/include/lldb/Core/StructuredDataImpl.h +++ b/lldb/include/lldb/Core/StructuredDataImpl.h @@ -68,14 +68,20 @@ return error; } - // Grab the plugin. - auto plugin_sp = lldb::StructuredDataPluginSP(m_plugin_wp); + // Grab the plugin + lldb::StructuredDataPluginSP plugin_sp; + if (!m_plugin_wp.expired()) + plugin_sp = lldb::StructuredDataPluginSP(m_plugin_wp); + + // If there's no plugin, call underlying data's dump method: if (!plugin_sp) { - error.SetErrorString("Cannot pretty print structured data: " - "plugin doesn't exist."); + if (!m_data_sp) { + error.SetErrorString("No data to describe."); + return error; + } + m_data_sp->Dump(stream, true); return error; } - // Get the data's description. return plugin_sp->GetDescription(m_data_sp, stream); } diff --git a/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py b/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py --- a/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py +++ b/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py @@ -35,6 +35,13 @@ # Tests for invalid data type self.invalid_struct_test(example) + # Test that GetDescription works: + s.Clear() + error = example.GetDescription(s) + self.assertTrue(error.Success(), "GetDescription works") + if not "key_float" in s.GetData(): + self.fail("FAILED: could not find key_float in description output") + dict_struct = lldb.SBStructuredData() dict_struct = example.GetValueForKey("key_dict")