[lldb-dev] [Bug 45988] New: SBValue.GetNumChildren() returns wrong value for double indirections
    via lldb-dev 
    lldb-dev at lists.llvm.org
       
    Mon May 18 22:47:03 PDT 2020
    
    
  
https://bugs.llvm.org/show_bug.cgi?id=45988
            Bug ID: 45988
           Summary: SBValue.GetNumChildren() returns wrong value for
                    double indirections
           Product: lldb
           Version: 10.0
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: All Bugs
          Assignee: lldb-dev at lists.llvm.org
          Reporter: jarin at google.com
                CC: jdevlieghere at apple.com, llvm-bugs at lists.llvm.org
SBValue::GetNumChildren seems to look through two pointer indirections, but
SBValue::GetChildAtIndex only through one.
If we have a value with pointer to a pointer to a struct, then GetNumChildren()
on that value will return the number of fields of the struct, but
GetChildAtIndex(0) will return the pointer to the struct and GetChildAtIndex(1)
will return the Invalid SBValue sentinel.
Repro:
```
$ cat a.cc
struct Inner
{ 
  int a;
  int b;
};
struct Outer
{ 
  Inner *inner;
};
int main()
{ 
  Inner inner{42, 56};
  Outer outer{&inner};
  return 0;  // break here
}
$ cat a.py
import lldb
import os
debugger = lldb.SBDebugger.Create()
debugger.SetAsync(False)
target = debugger.CreateTargetWithFileAndTargetTriple("a.out",
"x86_64-pc-linux")
main_bp = target.BreakpointCreateByLocation("a.cc", 16)
process = target.LaunchSimple (None, None, os.getcwd())
thread = process.selected_thread
frame = thread.GetSelectedFrame()
print(frame.EvaluateExpression("&(outer.inner)").GetNumChildren())
print(frame.EvaluateExpression("&(outer.inner)").GetChildAtIndex(0))
print(frame.EvaluateExpression("&(outer.inner)").GetChildAtIndex(1))
$ python a.py
2
(Inner *) *$1 = 0x00007ffedf89e290
No value
```
-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20200519/e1347e58/attachment.html>
    
    
More information about the lldb-dev
mailing list