问题
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.
回答1:
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.
回答2:
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.
来源:https://stackoverflow.com/questions/23653347/debug-a-mex-function-in-visual-studio