2016-04-15 76 views
1

的main.m去如何进行现场MatLab调试?

a 
b 

BM去

Line 1 to 489 (Many time-consuming codes are here) 
Line 490  wi=function_example(fff,w0,factor,10); 

但我在BM

的490线在这种情况下得到一个错误,我要重新

wi=function_example(fff,w0,factor,30); 

就在命令窗口中。

如果我自己更改了代码并重新运行了整个代码,则即使到达第490行,也需要很多时间(几小时甚至几天)。

但是由于fff,w0和factor在b.m中定义,fff,w0和factor不是全局变量。

所以,如果我只需键入

wi=function_example(fff,w0,factor,30); 

MATLAB将说

Undefined function or variable 'fff'. 

所以我很好奇如何运行在命令窗口只是一个中间路线,而不是改变代码本身和再次运行整个代码会花费太多时间。

+0

什么样的错误是你越来越?它与数据本身有关,换句话说,它是否可以通过一些较小的情况进行复制? (即如果你有一个网格,将其尺寸减小10^n)。 – Bernhard

回答

0

这很可能是不可能的......因为像fff,w0等变量只在运行脚本时被声明和定义。你可以做的就是用适当的值调用函数,看看函数是否返回了正确的值。例如,说function_example(1,2,3,30)应该返回40.看看该函数是否返回正确的值。底线 - 用已知的输入值测试函数,看它是否返回正确的结果。

+0

谢谢。但我可以想象,如果这是可能的,这将是非常有用的。如果我将值打印出来,您的解决方案将成为可能。但是这会让代码变得更慢更混乱。另一种解决方案是将代码的执行“回滚”到一些较早的点。这在MatLab中可能吗? – user42459

4

首先,您希望MATLAB在出现错误时自动开始调试。您可以通过在运行脚本之前键入以下来轻松完成此操作。

dbstop if error 

一旦出现错误,MATLAB会自动在发生错误的行开始debugging,并根据需要,你将有机会获得所有变量。

这是关于如何在调试过程中检查变量的更多information

+0

谢谢!但是您链接的文档说:“从编辑器选项卡的调试部分,从函数调用堆栈菜单列表中选择一个工作区。”但我看不到它。我正在使用MatLab 2015.这是MatLab 2016的新功能吗? – user42459

+2

工作区选择菜单只有在调试器中停止后才可见。 (这不是一个新功能,它已经出现在许多发行版中。)另请注意,如果因为使用'dbstop if error'而停止了调试器,那么您将已经在查看正确的工作区,不需要改变选择(除非你想再看看其他工作区)。 –

1

也许最简单的方法是将工作区保存在该行之前的权利和事后测试:

Line 1 to 489 (Many time-consuming codes are here) 
Line 490  save 
Line 491  wi=function_example(fff,w0,factor,10); 

之后,在命令行,你只需要运行:

load 
wi=function_example(fff,w0,factor,10); 
+1

这就是我想要的。通过退出调试器,您不会冒失去意外松动您所做的工作的风险。 – Bernhard