代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

运行脚本停在中间

  •  2
  • Tim unnamed eng  · 技术社区  · 15 年前

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

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

    我只是想知道我怎么才能确定它停在哪条线上?

    问题的原因是什么?我怎样才能从头到尾运行整个脚本?

    谢谢!


    更新:

    我用dbstop

    dbstop if error  
    dbstop if warning  
    run path2script
    

    运行仍然会遇到一些问题,没有给出任何关于原因的信息。

    7 回复  |  直到 15 年前
        1
  •  1
  •   Dennis Jaheruddin    12 年前

    1. 打开 dbstop if error
    2. 如果查找不够:选择导致错误的行并按f9。

    3. 如果仍然没有找到错误,请放置一个条件断点,该断点仅在到达错误发生的条件时触发。如果这是达到多次,你是困在一个循环不知何故。

        2
  •  0
  •   Eli    15 年前

    它是什么类型的脚本?

    你的内存用完了吗?如果超过了分配的最大堆大小,它可能会崩溃。当您重新启动它时,它会从它原来拥有的所有内存开始,并且可以运行到完成,然后才可能再次使用它的所有内存。

    我建议检查内存泄漏。

        3
  •  0
  •   Dima    15 年前

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

        4
  •  0
  •   groovingandi    15 年前

    如果不了解剧本和环境,很难判断。你确定它被卡住了,不只是忙于计算或获取更多内存吗?您可以尝试在发生挂起的迭代之前不久设置一个条件断点,然后使用调试器以交互方式单步执行以下代码。

        5
  •  0
  •   AlexC    15 年前

    正如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
    

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

    仔细检查您的代码每次在循环中都在做什么,看是否有任何依赖于之前的步骤的东西可能是异步运行的。

        6
  •  0
  •   Juhl    14 年前

    你可以试着用 dbstack

        7
  •  0
  •   Miebster    14 年前

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