我有一个脚本进行一些计算,并将一些不可见的图保存到linux服务器上的for循环内的图像文件中。
当我运行脚本时,它通常会卡在中间的某个地方。我不确定它到底停在哪里,但是我可以通过打印输出来知道for循环的哪个迭代。如果我从它停止的迭代中重新运行它,它可能会继续经过那个地方。所以在我看来没有错误。
我只是想知道如何确定它停在哪条线上?
问题可能是什么原因以及如何从头到尾运行整个脚本?
谢谢!
更新:
我使用dbstop
dbstop if error
dbstop if warning
run path2script
运行仍然卡住了一些,没有给出关于原因的消息。
答案 0 :(得分:1)
以下是了解发生情况的一种方法:
dbstop if error
一旦你的代码真的卡住了,按下CTRL + C,这将允许你检查情况并看看发生了什么
如果查看不够:选择导致错误的行并点击f9。
如果仍然没有找到错误,请放置一个条件断点,该断点仅在您到达错误发生期间/之后的条件后触发。如果多次达到这个目的,你会以某种方式陷入循环。
旁注:如果你不确定自己是否处于循环中,最近版本的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)脚本会抛出一个错误,指出中止时它所在的行。