运行脚本停在中间

时间:2010-01-26 15:49:06

标签: matlab

我有一个脚本进行一些计算,并将一些不可见的图保存到linux服务器上的for循环内的图像文件中。

当我运行脚本时,它通常会卡在中间的某个地方。我不确定它到底停在哪里,但是我可以通过打印输出来知道for循环的哪个迭代。如果我从它停止的迭代中重新运行它,它可能会继续经过那个地方。所以在我看来没有错误。

我只是想知道如何确定它停在哪条线上?

问题可能是什么原因以及如何从头到尾运行整个脚本?

谢谢!


更新:

我使用dbstop

dbstop if error  
dbstop if warning  
run path2script

运行仍然卡住了一些,没有给出关于原因的消息。

7 个答案:

答案 0 :(得分:1)

以下是了解发生情况的一种方法:

  1. 开启dbstop if error
  2. 一旦你的代码真的卡住了,按下CTRL + C,这将允许你检查情况并看看发生了什么

  3. 如果查看不够:选择导致错误的行并点击f9。

  4. 如果仍然没有找到错误,请放置一个条件断点,该断点仅在您到达错误发生期间/之后的条件后触发。如果多次达到这个目的,你会以某种方式陷入循环。

  5. 旁注:如果你不确定自己是否处于循环中,最近版本的Matlab有一个自动配置按钮,请使用它!

答案 1 :(得分:0)

它是什么类型的脚本?

你内存不足吗?如果超过最大分配堆大小,则可能会崩溃。当你重新启动它时,它会以它最初拥有的所有内存开始,并且可以在它再次使用所有内存之前运行完成。

我建议检查内存泄漏。

答案 2 :(得分:0)

当您的脚本“卡住”时会发生什么?它会退回到提示符,还是matlab只是挂起?如果是后者,那么听起来你的代码中有一个无限循环......

答案 3 :(得分:0)

在不了解脚本和环境的情况下很难说出来。你确定它被卡住了,而不只是忙于计算某些东西或获得更多内存吗?您可以尝试在发生挂起的迭代之前不久设置条件断点,然后使用调试器以交互方式逐步执行以下代码。

答案 4 :(得分:0)

正如groovingandi建议的那样,在迭代开始时在代码中设置一个条件断点,其中for循环通常会被卡住。您可以使用以下命令执行此操作:

dbstop in runscript at 500 if iLoop==365 
% where 500 is the first line within the for loop,
% and 365 is the iteration causing problems

如果您的脚本在没有断点的情况下卡住了,但是如果您使用断点然后继续,可以继续快乐地继续这一点,这通常表明您有一个与时间相关的偶发故障,可能是竞争条件。也许您正在向操作系统写入文件,然后立即查看操作系统以确定下一个文件的名称应该是什么,但您的文件系统是否稍微缓存?这样的事情给我带来了类似的问题。

仔细查看每次循环时代码执行的操作,以及可能依赖于异步运行的步骤之前的任何内容。

答案 5 :(得分:0)

您可以尝试使用dbstack函数并保存输出,我想在每次迭代中都会覆盖一个文件。

答案 6 :(得分:0)

我想补充一点,中止(ctrl + c)脚本会抛出一个错误,指出中止时它所在的行。