经常碰到一些情况,如:矩阵相乘A*B时(假设A已知,B需要运算得出),矩阵B的size难以确定,是用A*B还是A'*B难以确定,可不可以先计算B,运算完之后观察B的特性,再确定用A还是A‘?keyboard可以解决这个问题。
keyboard顾名思义,就是键盘的意思,即:把控制权交给键盘。执行程序的过程中,把控制权交给键盘,如何再重新返回程序呢?因此:
keyboard 与 return
通常联合使用。如执行:
但难以确定G还是G’,利用keyboard则可以修改为:
在进入K>> 之后,此时已经可以观察F、G的size,因此在Command Windows输入:
即可保证程序顺利执行。
B- try + (catch) + end
我们知道,matlab的代码是按行执行的,如果碰到错误行,则程序中断。try..catch可以使得可能出错的代码不影响后面代码的继续执行,也可以检查,排查,解决程序的一些错误,增强代码的鲁棒性和可靠性。
try...catch...end用于检查错误,如
这里面,当程序碰到 a = m*n;错误后,就会跳转到catch里面的语句,继续执行,有点类似于if...else...end。
C-dbstop
在程序执行前输入:
如果运行出现错误,matlab会自动停在出错的那行,并且保存所有相关变量。真心好用。
在.m文件中,插入dbstop in file指令,如下面这段程序,我们在其中加入了dbstop in VMD,其中VMD是一个function:
效果如下:
即设置断点并运行至VMD程序内部,此时通过F10/F11/Shift F11等断点操作中的快捷键,即可进行调试,Command Windows输入dbquit即可退出。
比如有myprogram.m, 如下:
设置一个断点在 n >= 4时(对应程序位置为第6行),然后再运行程序:
这时有:
可见,dbstop比断点设置更加智能,控制起来更为方便。补充一句:
此时与F12等价。
所有dbstop,可配合return或者dbstop使用;8 x/ Q2 c% ^5 k5 j2 _# ]! ~7 _
return:返回;7 {) w2 X H9 ^5 b: E$ g O
dbstop:停止
调试完成,需要清除所有断点:
在Command Windows输入:
在Command Windows输入:
| (1)设置断点: * dbstop in mfile:在文件名为mfile的M文件第一个可执行语句前设断点; 9 O8 x$ C C$ G1 y8 J) {) f+ B (2)断点清除: * dbclear all:清除所有M文件中的所有断点;' U( g3 I9 N8 j6 H9 H8 Y (3)恢复运行: * dbcount:从断点处恢复程序的执行,直到下一个断点或错误后返回Matlab基本工作空间; (4)执行一行或多行语句: * dbstep:执行下一个可执行语句; |
| 欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) | Powered by Discuz! X3.2 |