当Matlab和C++进行混编的时候,MacOS中调试Mex的方法有几种,一是利用Xcode,二是利用LLDB。在这里我尝试用Xcode对matlab的mex文件进行断点调试。
步骤如下:
1.在Xcode中,新建一个空的工程:"New->Project->Other->Empty",起一个工程名 如debug_xxx;
2.将需要调试的CPP文件拖动到新建的xcode工程中,然后在matlab中,设置当前根目录为这个工程目录,然后用mex -g xxxx.cpp 进行编译.
3.创建一个Scheme,"Product->Scheme->New Scheme” 取Name为debug
在Run
>
Info
>
Executable下拉框中选中"Other..”,然后快捷键“
Command+Shift+G
”,
输入matlab可执行文件
MATLAB_maci64
的绝对路径:/Applications/MATLAB_R2014b.app/Contents/MacOS/MATLAB_maci64
勾选Wait for executable to be launched
4.创建一个
Symbolic断点,"Debug->
Breakpoints->
Create Symbolic Breakpoint”
Name取为
NSApplicationMain,
Action中add action -> debugger command设为“
process handle -p true -n false -s false SIGSEGV SIGBUS”,
勾选“
Automatically continue after evaluating
”
4.随便在mex文件中设置一个断点,运行xcode工程,状态栏会显示 “Waiting for MATLAB to launch"
在终端命令行中进入到Matlab的可执行文件的目录,“
/Applications/MATLAB_R2014b.app/bin” , 输入./matlab 启动,
然后xcode状态显示为debug监听状态,在Matlab 中执行含有mex文件的m程序,xcode中会捕捉到,并在之前设置的断点处停下,之后就可以进行常规的xcode断点调试啦
参考: