Hi guys,
Having a graph of objects that doesn't want to go away even after GC but we think they should have, is a common scenario. At least, in my case. When I have this kind of issue, I spend hours, doing a "Strong Pointers" view from the explorer. And this is a pain and hard.
So I wonder...has anyone build a visualization tool to help this task? _______________________________________________ Moose-dev mailing list [hidden email] https://www.iam.unibe.ch/mailman/listinfo/moose-dev |
Mariano Martinez Peck wrote:
> Hi guys, > > Having a graph of objects that doesn't want to go away even after GC > but we think they should have, is a common scenario. At least, in my > case. When I have this kind of issue, I spend hours, doing a "Strong > Pointers" view from the explorer. And this is a pain and hard. > > So I wonder...has anyone build a visualization tool to help this task? > > thanks, > > -- > Mariano > http://marianopeck.wordpress.com I also find it hard to work backwards from Pointer Explorer. I wanted to use Roassal to examine a graph, but had trouble loading it from the Configuration Browser into an existing Image. So last week I started rolling a Morphic tool for this. I borrowed RTForceBasedLayout from Roassal, but it performed a bit slow (perhaps my misunderstanding on its use) so for now its ended up with a naive layout of my own. I'll try to package it up tonight, hopefully with a demo. cheers -ben _______________________________________________ Moose-dev mailing list [hidden email] https://www.iam.unibe.ch/mailman/listinfo/moose-dev |
In reply to this post by Mariano Martinez Peck
greetings all,
I had an itch to scratch... I find it difficult using the tree list of the standard Pointer Explorer to track down why objects aren't garbage collected. I always fear I'm not going to notice getting caught in a reference loop. So I created a tool presenting an alternative view as a directed graph. The graph incrementally builds out from the target object as you explore it. Nodes are colourised to help manage complexity. The attached snapshot is produced from evaluating the following Workspace script... testObject := 'END5'. ref1 := { testObject. nil }. ref2 := { ref1 }. ref3 := PDTestResource new heldObject: ref2. ref1 at: 2 put: ref3. "note the reference loop this creates" PointerDetective openOn: testObject. Now I expect I'm duplicating something done before, but I couldn't find anything quickly and it was an opportunity for some goal direct learning of Morphic. Thanks to Roassal an option for a spring-force layout is provided. That code was copied rather than create a dependency, and might need to be rationalized later. The code is a bit rough from hacking around learning how to make things work, but its functional, so its time to get it out in the open. For more information please refer to the repository home page... http://smalltalkhub.com/#!/~BenComan/PointerDetective cheers -ben _______________________________________________ Moose-dev mailing list [hidden email] https://www.iam.unibe.ch/mailman/listinfo/moose-dev PointerDetectiveExample1.png (40K) Download Attachment |
The image hangs when I double click on the green circle in your example.
By the way, is there a reason why you are not using Roassal? I am just wondering whether something obvious is missing in Roassal to prevent you from doing this? By using Roassal, you would have anti-aliasing, the free integration in GTInspector, many layouts to arrange your nodes, bezier curves, and all the good stuff Athens is providing. Good idea anyway! Cheers, Alexandre On Sep 2, 2014, at 1:40 PM, Ben Coman <[hidden email]> wrote: > greetings all, > > I had an itch to scratch... I find it difficult using the tree list of the standard Pointer Explorer to track down why objects aren't garbage collected. I always fear I'm not going to notice getting caught in a reference loop. So I created a tool presenting an alternative view as a directed graph. The graph incrementally builds out from the target object as you explore it. Nodes are colourised to help manage complexity. > > The attached snapshot is produced from evaluating the following Workspace script... > testObject := 'END5'. > ref1 := { testObject. nil }. > ref2 := { ref1 }. > ref3 := PDTestResource new heldObject: ref2. > ref1 at: 2 put: ref3. "note the reference loop this creates" > PointerDetective openOn: testObject. > > Now I expect I'm duplicating something done before, but I couldn't find anything quickly and it was an opportunity for some goal direct learning of Morphic. Thanks to Roassal an option for a spring-force layout is provided. That code was copied rather than create a dependency, and might need to be rationalized later. > The code is a bit rough from hacking around learning how to make things work, but its functional, so its time to get it out in the open. > > For more information please refer to the repository home page... > http://smalltalkhub.com/#!/~BenComan/PointerDetective > > cheers -ben > <PointerDetectiveExample1.png>_______________________________________________ > Moose-dev mailing list > [hidden email] > https://www.iam.unibe.ch/mailman/listinfo/moose-dev -- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. _______________________________________________ Moose-dev mailing list [hidden email] https://www.iam.unibe.ch/mailman/listinfo/moose-dev |
Alexandre Bergel wrote:
The image hangs when I double click on the green circle in your example. Can you provide me an image to download and investigate? Roassal really was my first choice. I tired, but after loading Roassal into my image from the Configuration Browser, I was getting the Red X of Death, seeminly due to fonts not being correct. I failed to rectify per cycling the FreeType-enabled setting, but in hindsight I think missed that the DejaVu fonts were still strikefonts. In any case, it was not a smooth out-of-the box experience. Per my suggestion [1] it would help if the user had some option after loading for this to occur automatically, to get a true working-out-of-box experience. Or maybe Roassal needs a Pharo 3 compatibility package that includes AthensStrikeFontRenderer from Pharo 4.By the way, is there a reason why you are not using Roassal? I am just wondering whether something obvious is missing in Roassal to prevent you from doing this? [1] http://moose-dev.97923.n3.nabble.com/Roassal-Easel-Red-X-of-Death-td4032782.html#none By using Roassal, you would have anti-aliasing, the free integration in GTInspector, many layouts to arrange your nodes, bezier curves, and all the good stuff Athens is providing. All good stuff I would have liked to have, butcompared to the usefulness of the basic functionality its not critical. Having now done it on top of Morphic, I consider it an advantage that its light weight. Its only three core classes** although maybe in need of some refactoring and has no external dependencies, so if the functional quality improves, PointerDetective might end up suitable for inclusion in Pharo. I think that wouldn't be an option if it was based on Roassal. It would be nice if I could refactor it to use Roassal when that is loaded, but its not an imperative at this time. **excluding the nice force layout code I took from Roassal, which ended up a secondary alternative, so its not a requirement. cheers -ben P.S. I am still planning to get back into the Roassal swing of things by porting my LEKtrek application to newer Roassal, but there have been too many interesting distractions in Pharo land:). Good idea anyway! Cheers, Alexandre On Sep 2, 2014, at 1:40 PM, Ben Coman [hidden email] wrote:greetings all, I had an itch to scratch... I find it difficult using the tree list of the standard Pointer Explorer to track down why objects aren't garbage collected. I always fear I'm not going to notice getting caught in a reference loop. So I created a tool presenting an alternative view as a directed graph. The graph incrementally builds out from the target object as you explore it. Nodes are colourised to help manage complexity. The attached snapshot is produced from evaluating the following Workspace script... testObject := 'END5'. ref1 := { testObject. nil }. ref2 := { ref1 }. ref3 := PDTestResource new heldObject: ref2. ref1 at: 2 put: ref3. "note the reference loop this creates" PointerDetective openOn: testObject. Now I expect I'm duplicating something done before, but I couldn't find anything quickly and it was an opportunity for some goal direct learning of Morphic. Thanks to Roassal an option for a spring-force layout is provided. That code was copied rather than create a dependency, and might need to be rationalized later. The code is a bit rough from hacking around learning how to make things work, but its functional, so its time to get it out in the open. For more information please refer to the repository home page... http://smalltalkhub.com/#!/~BenComan/PointerDetective cheers -ben <PointerDetectiveExample1.png>_______________________________________________ Moose-dev mailing list [hidden email] https://www.iam.unibe.ch/mailman/listinfo/moose-dev _______________________________________________ Moose-dev mailing list [hidden email] https://www.iam.unibe.ch/mailman/listinfo/moose-dev |
Free forum by Nabble | Edit this page |