<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br class=""><blockquote type="cite" class="">On Dec 2, 2014, at 4:44 PM, Jose H <<a href="mailto:jose.francisco.hevia@gmail.com" class="">jose.francisco.hevia@gmail.com</a>> wrote:<br class=""><br class="">Wow!! Greg, this is simple an incredible answer. Very useful<br class="">information, thank you again.<br class=""><br class="">I was scrapping little bits of the information you have posted on your<br class="">mail on my own, but it is way more clear now. It will take a while for<br class="">me to process all this information.<br class=""><br class="">One of the things I realized about variables is that they are not a<br class="">hierarchy but a network. So in order to make a graphical treeview that<br class="">in independent of the back end code it seems I need to do little<br class="">tricks.<br class=""><br class="">Imagine we have an structure parent, parent references children, but<br class="">each children also references their parent, so we have circular<br class="">references or loop references.<br class=""></blockquote><div class=""><br class=""></div>That is fine. You don't auto expand anything in your view (or you can, but you should stop at pointers or references). If you don't auto expand anything, then your users will do so by clicking to expand the tree view item and they can expand as much as they want to. <div class=""><br class=""></div><div class="">"frame variable" will print children or structs, unions and classes, but pointers and references don't get expanded for this very reason.</div><div class=""><br class=""><blockquote type="cite" class=""><br class="">The same could happen if we use double linked chain list , with each<br class="">node pointing to next node but also to the last one.<br class=""></blockquote><div class=""><br class=""></div>Again, don't expand pointers and references and you are ok.</div><div class=""><br class=""><blockquote type="cite" class=""><br class="">Now I want to represent the hierarchical structure of the variables in<br class="">a DataSource(the model of the data in a ModelViewContoller design)<br class="">that a viewcontroller is going to represent in the GUI. The<br class="">viewcontroller knows nothing about SBData or any other lldb code,<br class="">which makes porting(and maintaining) to other GUIs like Qt later much<br class="">easier.<br class=""><br class="">So for generating this Data Model we load the frame variable parent*<br class="">as an SBValue, we dereference the pointers with each of their<br class="">children, now we continue with each children and we find the reference<br class="">to the parent again, so if we continue it will never end, and the<br class="">three will be infinite.<br class=""></blockquote><div class=""><br class=""></div>Just don't auto expand ptrs and refs.<br class=""><blockquote type="cite" class=""><br class="">So for every reference I need some way of looking at the other<br class="">references in the in process tree, and if already there stop there.<br class=""></blockquote><div class=""><br class=""></div>Most GUIs will just show the top level variables and not even expand structs, unions and classes unless the use clicks on a disclosure triangle. Try loading the lldb/examples/python/lldbtk.py file:</div><div class=""><br class=""></div><div class="">(lldb) file a.out</div><div class="">(lldb) b main</div><div class="">(lldb) run</div><div class="">(lldb) command script import /users/me/lldb/examples/python/lldbtk.py</div><div class="">(lldb) tk-variables <br class=""><img apple-inline="yes" id="D7A336DC-A782-4453-91CD-72F91FE67C8C" height="348" width="796" apple-width="yes" apple-height="yes" src="cid:578BF310-F237-458B-A028-7FB792ACB720@apple.com" class=""></div><div class=""><br class=""></div><div class="">Not the pointers haven't been expanded. You can probably loot the python code in lldbtk.py and make it work with your GUI framework.</div><div class=""><br class=""></div><div class=""><blockquote type="cite" class="">But I suppose the people of lldb faced this problem before I did and<br class="">you have already solved it somehow. Did you?<br class=""></blockquote><div class=""><br class=""></div>Yep, GUIs don't expand anything unless the user clicks to expand it. Below I clicked on the triangle before "path" to expand it:</div><div class=""><br class=""></div><div class=""><img apple-inline="yes" id="464E8C64-A569-4EB0-B9F4-1CA69B961062" height="348" width="796" apple-width="yes" apple-height="yes" src="cid:19384641-EE4A-4047-8AEF-E7F7F8871F50@apple.com" class=""><br class=""><blockquote type="cite" class=""><br class="">Anyway,like with Frankenstein, the thing is finally taking shape and<br class="">soon will get alive. The possibilities lldb bring look out of this<br class="">world. Dreams like creating a video of the evolution of data<br class="">structures while the program become possible, making possible to see<br class="">your program from other perspectives and using parts of your brain<br class="">that monotone text atrophies is within reach now, something you could<br class="">almost touch now.</blockquote><br class=""></div><div class="">Hopefully my comments shed some light on things above?</div></body></html>