[Newbies] object instance browser?

karl ramberg karlramberg at gmail.com
Tue Dec 31 11:37:24 UTC 2013

Make a Welcome Workspace with this info :-)


On Tue, Dec 31, 2013 at 11:27 AM, Bert Freudenberg <bert at freudenbergs.de>wrote:

> On 31.12.2013, at 08:53, David Holiday <neuburge at 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 at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/beginners/attachments/20131231/0a9d527e/attachment.htm

More information about the Beginners mailing list