【问题标题】:If my Pharo image goes into an infinite loop, how do I break out of the loop?如果我的 Pharo 图像进入无限循环,我该如何跳出循环?
【发布时间】:2014-09-07 09:56:34
【问题描述】:

昨天我花了大约 2 个小时来处理我的 Pharo 图像时,我不小心写了一些代码并执行它导致了一个无限循环——实际上,我是从另一个方法调用一个方法,而后者又调用了原始方法,永远来回。 pharo 图像没有反应。我重新启动了映像,并且在那两个小时内丢失了所有工作!

我在网上看了,我可以点击alt-. 进入某种进程查看器?我怎样才能从那里杀死无限循环?

【问题讨论】:

    标签: smalltalk pharo


    【解决方案1】:

    您确实可以使用<action key>-.(mac 的 cmd 位置,win 的 ctrl 和 linux 的 alt 可能是 linux 上的 ctrl 和 windows 上的 alt。例如 Pharo 6.1 在 win 上使用 alt 10).

    <action key>-. 导致用户中断并在正在执行的地方打开调试器。

    【讨论】:

    • 谢谢 Uko;您能否扩展您的答案以解释我如何从调试器中杀死 VM 内部的违规进程?
    • @SamPearson:您只需关闭halt execution 时打开的调试器即可停止无限循环。严格来说,虽然 MartinW 的答案非常有用,但这个答案实际上回答了这个问题。事实上,将这两个问题/答案分开可能是值得的,以使遇到相同问题的其他人更容易找到恢复信息。 Uko,在 Windows 和 Linux 上实际上是 Alt+.
    • 在 Pharo 6.1 中是 ALT-。在 Windows 10 上。
    【解决方案2】:

    除了像@Uko 解释的那样中断无限循环之外,您可能并没有像您担心的那样在这两个小时内丢失所有工作。

    如果你在没有保存的情况下从外部杀死了 Pharo,你可以随时使用

    • 通过世界菜单>工具>恢复丢失的更改…
    • 重新启动图像中的“恢复丢失的更改”工具
    • 在文本编辑器中打开与您的图像对应的 .changes 文件,查看您过去对系统所做的所有更改,然后将其中的部分或全部复制并粘贴回正在运行的图像中。

    【讨论】:

    • 哇,这太酷了!所以当我进行更改时,.changes 文件会被写入,即使我还没有保存图像?
    • 没错。在实践中,我发现它并没有保存 Pharo by Example 中承诺的所有更改,但它确实保存了添加或更改的方法。
    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    相关资源
    最近更新 更多