[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