【问题标题】:smalltalk inspect - output to transcript or filesmalltalk 检查 - 输出到脚本或文件
【发布时间】:2014-10-23 10:29:16
【问题描述】:

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

我需要它,因为我想为作为 unix 进程(而不是“窗口”程序)运行并将信息记录到日志文件中的程序创建一种调试器。

感谢您的帮助!

【问题讨论】:

  • 您能否提供更多关于您想要实现的目标的详细信息?我无法想象你的设置。

标签: smalltalk


【解决方案1】:

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

虽然遍历 inst var 并滚动自己的变量非常容易(尽管可能不适用于直接对象),但“最简单”的方法可能是查看检查器代码并查看它是如何运行的。例如,在 Pharo 4.0 中,可以(非常基本)像这样利用检查器代码:

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

将打印:

小整数 '自我'-> 1 '十六进制'-> 1 '八进制'-> 1 '二进制'-> 1 '字符'->字符主页

【讨论】:

    【解决方案2】:

    在 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。

    【讨论】:

      猜你喜欢
      • 2015-01-29
      • 1970-01-01
      • 2013-05-16
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      相关资源
      最近更新 更多