user3452568
user3452568

Reputation: 283

smalltalk inspect - output to transcript or file

Smalltalk inspect is a powerful tool. Is there any (easy) way to get the information from inspect and show it in Transcript window or write into a file instead of showing it in new window?

I need it because I want to create a kind of debbuger for a program that runs as unix process (not a 'window' program) and logs information into a log file.

Thanks for help!

Upvotes: 0

Views: 586

Answers (2)

philippeback
philippeback

Reputation: 801

In Pharo, you can also get all of the Transcript output going to the console with:

NonInteractiveTranscript stdout install

If you are about debugging, you can have debugger interactions dump things into files (of course, you'll not be able to step in there but it can be useful for headless systems):

NonInteractiveUIManager compile: 'openDebuggerOn: process context: context label: title contents: contentsStringOrNil fullView: bool 
| out  |
out := VTermOutputDriver stdout.

out 
  << ''NonInteractive Debugger: ''; 
  << title; 
  cr.

contentsStringOrNil ifNotNil: [ out << contentsStringOrNil; cr ].

(context stackOfSize: 20) do: [:s | out << s printString; cr ].

out << ''------------------------------''; cr; cr.  

^ self nonInteractiveWarning: ''Opening Debugger''' classified: #'ui-requests'.

This and Sean's answer should go a long way.

You can get back to normal with the Transcript with:

ThreadSafeTranscript install.

Pharo 3.0 here.

Upvotes: 0

Sean DeNigris
Sean DeNigris

Reputation: 6390

If you're asking whether something is built in, then I don't think so (although it would help if you tagged the question with which Smalltalk you are using).

Although it would be pretty easy to walk over the inst vars and roll your own (although maybe not for immediate objects), the "easiest" way might be to look at the inspector code and see how it operates. For example, in Pharo 4.0 one could (very basically) leverage the inspector code like so:

i := EyeInspector inspector: 1.
Transcript show: i objectClass; cr.
i elements do: [ :e | Transcript show: e; cr ].

which would print:

SmallInteger
'self'->1
'hex'->1
'octal'->1
'binary'->1
'character'->Character home

Upvotes: 2

Related Questions