How Developers Use Dynamic Features of Programming Languages: Smalltalk [pdf]
users.dcc.uchile.cl
users.dcc.uchile.cl
You can write code very complex conditional code for debugging, without the tons of roadblocks an environment like VisualStudio will throw in your way. Then your conditional debug code can find a particular instance and tell that specific instance to change its class to a special debugging subclass.
There are many other tricks, but the combination of just those two tricks give you debugging "superpowers."
How's that?
In fact, the stack itself is just a normal property of the system that shows up when the system encounters something it does not understand, and asks you to provide an answer.
Smalltalk is absolutely weird.