[Lldb-commits] [PATCH] Make SBValue::GetNonSyntheticValue return really that.
Enrico Granata
egranata at apple.com
Wed Jun 24 12:58:00 PDT 2015
Try this:
Sending source/API/SBValue.cpp
Transmitting file data .
Committed revision 240578.
It seems to fix your issue for me
> On Jun 22, 2015, at 12:50 PM, Siva Chandra <sivachandra at google.com> wrote:
>
> The following is a small repro case I am using.
>
> C++ source (class.cc):
>
> 1 class CCC
> 2 {
> 3 public:
> 4 int a, b, c;
> 5 };
> 6
> 7 int
> 8 main ()
> 9 {
> 10 CCC obj = { 111, 222, 333 };
> 11 return 0;
> 12 }
>
> Python (ccc.py):
>
> 1 import lldb
> 2
> 3 def ccc_summary(sbvalue, internal_dict):
> 4 sbvalue = sbvalue.GetNonSyntheticValue()
> 5 return ("%s, %s, %s" %
> 6 (str(sbvalue.GetChildMemberWithName("a")),
> 7 str(sbvalue.GetChildMemberWithName("b")),
> 8 str(sbvalue.GetChildMemberWithName("c"))))
> 9
> 10
> 11 class CCCSynthProvider(object):
> 12 def __init__(self, sbvalue, internal_dict):
> 13 self._sbvalue = sbvalue
> 14
> 15 def num_children(self):
> 16 return 3
> 17
> 18 def get_child_index(self, name):
> 19 raise RuntimeError("I don't want to be called!")
> 20
> 21 def get_child_at_index(self, index):
> 22 if index == 0:
> 23 return self._sbvalue.GetChildMemberWithName("a")
> 24 if index == 1:
> 25 return self._sbvalue.GetChildMemberWithName("b")
> 26 if index == 2:
> 27 return self._sbvalue.GetChildMemberWithName("c")
> 28
> 29
> 30 cat = lldb.debugger.CreateCategory("my_cat")
> 31 cat.AddTypeSynthetic(
> 32 lldb.SBTypeNameSpecifier("CCC"),
> 33 lldb.SBTypeSynthetic.CreateWithClassName("ccc.CCCSynthProvider",
> 34 lldb.eTypeOptionCascade))
> 35 cat.AddTypeSummary(
> 36 lldb.SBTypeNameSpecifier("CCC"),
> 37 lldb.SBTypeSummary.CreateWithFunctionName("ccc.ccc_summary",
> 38 lldb.eTypeOptionCascade))
> 39 cat.SetEnabled(True)
>
> Without the proposed change, this is what happens:
>
> (lldb) script import ccc
> (lldb) b class.cc :11
> Breakpoint 1: where = a.out`main + 25 at class.cc:11, address = 0x0000000000400506
> (lldb) r
> Process 31046 launched: '/usr/local/google/home/sivachandra/LAB/lldb_scripting/a.out' (x86_64)
> Process 31046 stopped
> * thread #1: tid = 31046, 0x0000000000400506 a.out`main + 25 at class.cc:11, name = 'a.out', stop reason = breakpoint 1.1
> frame #0: 0x0000000000400506 a.out`main + 25 at class.cc:11
> 8 main ()
> 9 {
> 10 CCC obj = { 111, 222, 333 };
> -> 11 return 0;
> 12 }
> (lldb) p obj
> Traceback (most recent call last):
> File "./ccc.py", line 19, in get_child_index
> raise RuntimeError("I don't want to be called!")
> RuntimeError: I don't want to be called!
> Traceback (most recent call last):
> File "./ccc.py", line 19, in get_child_index
> raise RuntimeError("I don't want to be called!")
> RuntimeError: I don't want to be called!
> Traceback (most recent call last):
> File "./ccc.py", line 19, in get_child_index
> raise RuntimeError("I don't want to be called!")
> RuntimeError: I don't want to be called!
> Traceback (most recent call last):
> File "./ccc.py", line 19, in get_child_index
> raise RuntimeError("I don't want to be called!")
> RuntimeError: I don't want to be called!
> Traceback (most recent call last):
> File "./ccc.py", line 19, in get_child_index
> raise RuntimeError("I don't want to be called!")
> RuntimeError: I don't want to be called!
> Traceback (most recent call last):
> File "./ccc.py", line 19, in get_child_index
> raise RuntimeError("I don't want to be called!")
> RuntimeError: I don't want to be called!
> (CCC) $0 = No value, No value, No value {
> a = 111
> b = 222
> c = 333
> }
>
> After the proposed change:
>
> (lldb) script import ccc
> (lldb) b class.cc :11
> Breakpoint 1: where = a.out`main + 25 at class.cc:11, address = 0x0000000000400506
> (lldb) r
> Process 31412 launched: '/usr/local/google/home/sivachandra/LAB/lldb_scripting/a.out' (x86_64)
> Process 31412 stopped
> * thread #1: tid = 31412, 0x0000000000400506 a.out`main + 25 at class.cc:11, name = 'a.out', stop reason = breakpoint 1.1
> frame #0: 0x0000000000400506 a.out`main + 25 at class.cc:11
> 8 main ()
> 9 {
> 10 CCC obj = { 111, 222, 333 };
> -> 11 return 0;
> 12 }
> (lldb) p obj
> (CCC) $0 = (int) a = 111, (int) b = 222, (int) c = 333 {
> a = 111
> b = 222
> c = 333
> }
>
>
> http://reviews.llvm.org/D10581
>
> EMAIL PREFERENCES
> http://reviews.llvm.org/settings/panel/emailpreferences/
>
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
Thanks,
- Enrico
📩 egranata@.com ☎️ 27683
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150624/9fb547b3/attachment.html>
More information about the lldb-commits
mailing list