<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>On Aug 27, 2013, at 8:48 PM, Jakob Leben <<a href="mailto:jakob.leben@gmail.com">jakob.leben@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Hi Enrico,<br><br>On Tue, Aug 27, 2013 at 6:53 PM, Enrico Granata <<a href="mailto:egranata@apple.com">egranata@apple.com</a>> wrote:<br><blockquote type="cite">Do you have a test case for your issue? I would like to take a look.<br>The fact that GetChildAtIndex() works is not unexpected. I would like to<br>figure out why GetPointeeData() & ReadRawData() are failing.<br></blockquote><br>Erm, sorry, that was my mistake! While cooking up a simple test case,<br>I realized I was passing size to ReadRawData as element count instead<br>of count * sizeof(type).<br><br>Thanks for other answers, that makes things much clearer!<br><br>Further observations that I would like to clarify:<br><br>1. Reading elements of std::list works just great using<br>GetNumChildren() and GetChildAtIndex() on the container, when the<br>container is set to use synthetic value. However the<br>"can_create_synthetic" argument of GetChildAtIndex() does not seem to<br>have any effect, contrary to what documentation suggests. Am I<br>misreading something or is documentation wrong? Perhaps the argument<br>only controls the preference of children with regard to grandchildren,<br>and not how children are obtained.<br><br></blockquote><div><br></div><div>That is because historically LLDB called “synthetic” something entirely different from “synthetic children”.</div><div>Assume you have </div><div><br></div><div>Foo* aFoo = new Foo[3];</div><div><br></div><div>The previous notion of synthetic was “LLDB, can you make me aFoo[2] as if aFoo was a large enough array of Foo”?</div><div><br></div><div>That is was can_create_synthetic controls in GetChildAtIndex().</div><div>It is an unfortunate legacy naming that I am aware of and just have never had time to fix.</div><br><blockquote type="cite">2. For std::vector, GetNumChildren() returns -1 (with preference for<br>synthetic)! However, reading children using GetChildAtIndex() etc.<br>still succeeds.<br><br></blockquote><div><br></div><div>Interesting. Test case?</div><br><blockquote type="cite">3. For both std::vector or std::list, I would then expect<br>container.GetData().GetSignedXxx(error, index) to work as well. It<br>fails in either case, and regardless of preference of container with<br>regard to synthetic values.<br><br></blockquote><div><br></div><div>That is probably because you are trying to access the synthetic children by reading into raw memory?</div><div>That won’t work. When you try getting data you are reading the raw object, not the synthetic data.</div><div>The synthetic data is only accessible by poking at the children</div><br><blockquote type="cite">4. For std::string, GetNumChildren() always returns 1 regardless of<br>preference for synthetic values, and I haven't found any way to read<br>elements succesfully.<br></blockquote><div><br></div><div>That makes sense. An std::string only has one child, which is a struct that then contains the pointer</div><div>std::string has no synthetic children, also.</div><div>It only has a summary.</div><div>To figure out what types have what formatters the “type xxxxxx list” commands (where xxxx can be format, summary, synthetic or filter[1]) is your friend</div><div><br></div><div>[1] filters are a lightweight type of synthetic children which you can use to only show a subset of the real member variables</div><div><br></div><div>
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div style=" orphans: 2; widows: 2; border-collapse: separate; border-spacing: 0px;"><span style="font-size: 12px; orphans: auto; widows: auto;">Enrico Granata</span><br style="font-size: 12px; orphans: auto; widows: auto;"><span style="font-size: 12px; orphans: auto; widows: auto;">📩 egranata@</span><font color="#ff2600" style="font-size: 12px; orphans: auto; widows: auto;"></font><span style="font-size: 12px; orphans: auto; widows: auto;">.com</span><br style="font-size: 12px; orphans: auto; widows: auto;"><span style="font-size: 12px; orphans: auto; widows: auto;">☎️ 27683</span></div></div></div>
</div>
<br><div><div><br></div></div></body></html>