Go away, mdbstatus!
Matlab’s self-hosting nature can sometimes be an inconvenience. Case in point: if you have
dbstop if all error enabled, and you save a file in the editor, Matlab will usually pull you up short at a breakpoint in
If you find your Matlab editor randomly pulling you up in
mdbstatus for no good reason, this might be what’s happening.
This happens because
mdbstatus is called automatically by Matlab, and in
mdbstatus, in its local function
localGetFileBreakpoints, it uses a
catch for detecting the debugger status of a given file. And its
catch regularly gets hit during normal usage. Unfortunate design.
mdbstatus is implemented in M-code, and not as a builtin, so we can hack around it. Here’s a hack to fix it:
mdbstatus.m file using
which mdbstatus. Copy that to a user-local file in your Matlab documents directory. (This is at
~/Documents/MATLAB on macOS and “My Documents/MATLAB” on Windows (
%USERPROFILE/Documents/MATLAB by default on recent Windows versions.))
In your new user-local
mdbstatus.m, add this code at the beginning of of the
% apjanke's custom modification % Avoid triggering "dbstop if all error" breakpoints here. Otherwise you'll % pick up a breakpoint most times you do a file save! origDebuggerState = dbstatus('-completenames'); RAII.dbstop = onCleanup(@() dbstop(origDebuggerState)); dbclear if all error % end apjanke's custom modification
That will locally disable
dbstop if all error while
mdbstatus is doing its
There’s nothing special about the
RAII variable. It’s just a local
struct to hold cleanup functions that will be called when the stack unwinds; RAII is my conventional variable name for that. (Though it’s probably really better called “SBRM”.)
Since you’re hacking an internal Matlab function, I’d recommend making a prominent note of it. Stick this big old comment banner at the top of your new
mdbstatus.m so it’s apparent what’s going on.
% ========================================================= % NOTE: This is apjanke's custom modification of mdbstatus.m, not the % original Matlab file. It has been modified to avoid triggering the % "dbstop if all error" breakpoint when files are saved in the editor. % =========================================================
(And use your own name if you want, of course.)
This was tested on Matlab R2016b and R2017b. YMMV on other versions. I’ve reported this behavior as a but to MathWorks, but who knows if and when they’ll get around to fixing it.