smalltalk inspect - 输出到transcript或file

时间:2014-10-23 10:29:17

标签: smalltalk

Smalltalk inspect是一款功能强大的工具。是否有任何(简单)方法从inspect获取信息并在Transcript窗口中显示或写入文件而不是在新窗口中显示?

我需要它,因为我想为一个以unix进程运行的程序(不是一个'窗口'程序)创建一种debbuger,并将信息记录到日志文件中。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

如果您在询问是否内置了某些内容,那么我不这么认为(如果您使用 正在使用的Smalltalk标记了问题,这会有所帮助。)

尽管走过inst vars并自己滚动(虽然可能不是直接对象)会很容易,但“最简单”的方法可能是查看检查器代码并查看它是如何运作的。例如,在Pharo 4.0中,可以(非常基本上)利用检查器代码,如下所示:

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

会打印:

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

答案 1 :(得分:0)

在Pharo中,您还可以通过以下方式获取所有Transcript输出到控制台:

NonInteractiveTranscript stdout install

如果你是关于调试,你可以让调试器交互将东西转储到文件中(当然,你不能介入那里,但它对无头系统很有用):

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'.

这和肖恩的答案应该有很长的路要走。

您可以使用以下内容恢复正常:

ThreadSafeTranscript install.

Pharo 3.0。