Question

I'm trying to wrap existing C++ code into a MATLAB callable function. I'm using Visual Studio 2013 to generate the MEX file . The MEX file is created properly, I can call it from MATLAB and pass arguments back and forth without any issues.

Now I want to debug my C++ logic, and I can't seem to get it to work. I've created an m script that calls my function, and had Visual Studio run MATLAB when debugging - as explained here .

When I hit F5 to debug my MEX file, Visual Studio runs MATLAB, and then exits debug mode very quickly, as if the MATLAB process terminated. A few seconds after that, MATLAB starts running the code. It is as if the MATLAB instance I'm running starts another instance and terminates, confusing Visual Studio.

How can I debug my MEX function?

UPDATE: Apparantly MATLAB is doing exactly that, as described here. Adding the -wait argument makes Visual Studio wait until the script is done running, but the breakpoints I set don't work - because the process being debugged is not the process loading the DLL.

Was it helpful?

Solution

Turns out <MATLABROOT>\bin\matlab.exe actually runs <MATLABROOT>\bin\w64\matlab.exe. So if I ask Visual Studio to run that, breakpoints are triggered as expected.

Running MATLAB this way under the debugger is a lot slower than any other way, but at least now I can debug my code.

OTHER TIPS

You could also run a MATLAB session as usual, and then attach Visual Studio to the running process. This is explained in more details in the documentation. Here is a quick summary:

  • compile the source MEX-file with debugging symbols enabled.
  • open the source C/C++ file in Visual Studio, and place a breakpoint.
  • start a normal MATLAB session. Then from Visual Studio, attach to the running matlab.exe process.
  • finally from MATLAB, run the MEX-function. You should hit the breakpoint with execution paused.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top