Smalltalk inspect
是一款功能强大的工具。是否有任何(简单)方法从inspect
获取信息并在Transcript窗口中显示或写入文件而不是在新窗口中显示?
我需要它,因为我想为一个以unix进程运行的程序(不是一个'窗口'程序)创建一种debbuger,并将信息记录到日志文件中。
感谢您的帮助!
答案 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。