Make a Welcome Workspace with this info :-) Cheers, Karl
On Tue, Dec 31, 2013 at 11:27 AM, Bert Freudenberg <b...@freudenbergs.de>wrote: > On 31.12.2013, at 08:53, David Holiday <neubu...@rohan.sdsu.edu> wrote: > > > Is there a way to browse the ecosystem of objects in a Smalltalk image? > > Yes, multiple ones in fact. This is a major reason working in Smalltalk > feels more immediate than in other environments. > > > I'm not talking about the class browser, what I'm looking for is a way > to see what objects have actually been instantiated and what their state is. > > The basic tool for this is called an Inspector. Whenever you have an > expression, like "3 + 4", you press cmd-i to "inspect it", which opens an > inspector on the result. This works in any text area. Try for example > inspecting "self" in a class browser, and you will inspect the underlying > class object (which the browser shows a high-level view of). > > In the Inspector you see the objects referenced by this object (via > instance variables or indexed fields) in the left panel. Select any of them > and choose "inspect" from the context menu (or press cmd-i again). This way > you can inspect all the objects in the system. > > A more modern tool than the Inspector (which was around 40 years ago > already) is the Object Explorer. It presents you a tree view of an object > and its "children", which again are the instance variables and indexed > fields of the object. Open it with cmd-shift-i (or "explore" in the context > menu). > > You can also do the reverse. If you choose "objects pointing to this > value" you get an inspector showing all the objects that directly point to > this object. Similarly there is a "reverse explorer", which you can open by > selecting "explore pointers". > > There are two roots to all the objects in the system: > > Smalltalk specialObjectsArray > > which basically holds everything the Virtual Machine needs to know about, > and in turn almost every object in the whole image, and > > thisContext > > which is the current execution context, holding onto temporary objects. > When a garbage collection is performed, any object not reachable form > either of these two roots is removed from memory. > > An "interesting" global object to explore is > > Project current > > which holds your current workspace, in particular > > Project current world > > , the root of all morphs in the world. And of course > > Smalltalk > > itself is the dictionary that holds all global objects, including all > classes (unless they are defined in a non-global environment). > > There is also a low-level way to enumerate all objects in memory. "self > someObject" will return the very first object in memory (which happens to > be the nil object), and "anObject nextObject" will return the next one: > > | object count | > count := 0. > object := self someObject. > [0 == object] > whileFalse: [count := count + 1. > object := object nextObject]. > count > > Interestingly, this also finds objects that are due to be > garbage-collected. For example, if you accidentally closed a text window, > there is a good chance its contents will still be in memory, and can be > retrieved using an expression like > > ByteString allInstances last: 10 > > This makes use of the someInstance/nextInstance methods, which are similar > to someObject/nextObject, but restricted to instances of one class only. > > Hope you have fun poking around in the world of objects :) > > - Bert - > > > _______________________________________________ > Beginners mailing list > Beginners@lists.squeakfoundation.org > http://lists.squeakfoundation.org/mailman/listinfo/beginners >
_______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners