File Exchange Pick of the Week

A great utility for debugging 5

Posted by Brett Shoelson,

Brett's Pick this week is dbmute and unmute, companion functions that facilitate code tweaking and debugging.

Those of you who read my colleagues' blog Ken & Mike on the MATLAB Desktop may have already been introduced to today's pick; it comes to us from fellow MathWorker and blogger Ken Orr (his first official submission--welcome to the File Exchange, Ken!).

Back in mid-July, Ken wrote a blog post on Muting Breakpoints. He described how he uses breakpoints to help him debug his code, and he wrote that he wanted the ability to quickly disable (and re-enable) those breaks. To solve the problem, Ken wrote, and showed the code for, dbmute and dbunmute. I adopted the functions immediately--they've quickly become an integral part of my own code development workflow. I also commented on that post, suggesting that these functions belong on the MATLAB Central File Exchange, and hinting about their destiny as "Picks of the Week." Good to my word, today's Pick honors Ken's submission.

One side note: Ken suggested in a final thought that it might be useful to create shortcuts to the functions:

I took it one step farther, and implemented a single shortcut that toggles my breakpoints:

Anyone care to venture a guess how I did that?


Get the MATLAB code

Published with MATLAB® 7.8

5 CommentsOldest to Newest

Here’s how I would write the toggle shortcut:

s = dbstatus('-completenames');
mute = true;
for i = 1:length(s)
   if (strcmp(s(i).expression,'false'))
      mute = false;
      break;
   end
end
if (mute)
   dbmute
   disp('Muting all breakpoints');
else
   dbunmute
   disp('Unmuting all breakpoints');
end

Hi Corbin,
Nice! My version simply stored the mute status in, and queried from, the appdata of the MATLAB root:

muteStatus = getappdata(0,'dbmuteStatus');
if isempty(muteStatus) || ~muteStatus
    setappdata(0,'dbmuteStatus',true);
    dbmute
else
    setappdata(0,'dbmuteStatus',false);
    dbunmute
end

But your version works well, too. If you’ll respond directly to my email…HINT:

char(cumsum([98 16 -13 15 0 -70 69 -11 7 -10 7 7 -4 -1 -46 45 -12 19 -12 15 -8 3 -7 8 -69 53 12 -2]))

with your snail mail address, I’d like to send you a small token of our appreciation!

Hi Eric,
Thanks for the questions. No, my icon doesn’t change colors; I don’t think there’s a documented way to implement that. (Though if someone can demonstrate that I’m wrong in that regard, I’d be _most_ interested!) The picture on top (above) was from Ken’s blog (Ken & Mike on the MATLAB Desktop). Ken chose to implement two buttons. One can easily be red, the other green. I opted for a toggle instead (lower picture). It’s always red.

And no, setting the appdata does not require administrative privileges. That’s just core MATLAB speak! (Read the doc entry for |setappdata| for more on that.)

Cheers!
Brett

These postings are the author's and don't necessarily represent the opinions of MathWorks.