There are lots of posts on the MATLAB newsgroup asking questions like why do I get this error "xxx"? One of the most common answers shows users how to track down the information for themselves.
Give a man a fish and you feed him for a day. Teach a man to fish and you feed him for a lifetime.
This entails learning to use the MATLAB debugger.
There are probably a lot of ways to debug programs. I am going to mention the ones that come to me quickly. These include:
- editing the code and removing semicolons or adding a keyboard statement at judicious locations
- setting a breakpoint at a particular line and stepping through code from there
- using a variant of setting a breakpoint by using dbstop if error
- seeing if the mlint code analyser can help (also reachable from the Tools menu)
- comparing variants of the code using the File and Folder Comparisons tool or visdiff for command-line access
Now that MATLAB has a great debugger (whether you use the commands or use the tools provided in the MATLAB Editor), I now longer use the technique where I edit my code. It's too easy to not remember all the spots I edited and have them revert, except for my bug fix, when I'm done.
If I'm not sure where the bug is, guessing where to place a breakpoint sometimes doesn't always work well. In those cases, I generally set dbstop if error> and see where things have gone wrong. From there, I can backtrack as needed, sometimes using the technique of setting a breakpoint at the top of the function which elicited the error. I can then run again and step through from the top. Sometimes I have to backtrack to other functions on the call stack, but at least I have a point of reference by then.
Since I often work from the editor, rather than the command-line, I automatically see the code analysis messages. I do find it useful sometimes to do a side-by-side comparison of two versions of a file and I generally do so from the editor Tools menu.
We've all heard the adage "a picture's worth a thousand words." With that in mind, instead of just looking at the code or variable values, I frequently find myself plotting interesting variables to get a quick look. Often I can tell from a quick plot exactly which variable is incorrect and that then helps me narrow down where to look for the bug.
Do you have some helpful debugging techniques to share? I'd love to hear them here.