这个例子展示了如何调试yprime
墨西哥人文件使用Xcode.
复制源MEX文件
的yprime.c
源代码在matlabroot
文件夹中。在MATLAB®,将文件复制到本地可写文件夹,例如/用户/共享/工作
.如果该文件夹不存在,则创建该文件夹,并将其设置为MATLAB中的当前文件夹。
workdir = fullfile (' / ',“用户”,“共享”,‘工作’);mkdir (workdir)复制文件(fullfile (matlabroot“外来的”,“例子”,墨西哥人的,“yprime.c”), workdir) cd (workdir)
编译源MEX文件
控件编译源MEX文件- g
选项,它添加调试符号。MATLAB创建二进制MEX文件,yprime.mexmaci64
.
墨西哥人- gyprime.c
创建空Xcode工作区进行调试
在Xcode,
选择文件>新>工作空间.
在文件选择对话框中,在保存为:字段debug_yprime
.
选择/用户/共享/工作
用于存储工作区的文件夹。要选择文件夹,要么导航到文件夹,要么按命令+ Shift + G键盘快捷键切换进入文件夹:菜单并键入完整路径/用户/共享/工作
.
点击保存.
添加yprime
文件Xcode工作空间
添加yprime.c
文件到工作区中,将其从/用户/共享/工作
的左侧导航栏Xcode工作区窗口。
清除目的地选项,将项目复制到目标组的文件夹中(如果需要)
.清除此选项可以将断点添加到MATLAB运行的文件中。
要添加文件,单击完成.
创建计划
选择产品>计划>新方案…….
离开目标设置为没有一个
.
集的名字来调试
.
新闻好吧.方案编辑对话框打开。
设置运行>信息>可执行的选项其他…….在文件选择窗口中,按命令+ Shift + G键盘快捷键切换进入文件夹:菜单。的完整路径MATLAB_maci64
MATLAB应用程序包中的可执行文件。完整路径的一个例子是/应用程序/ MATLAB_R2016a.app /内容/ MacOS / MATLAB_maci64
.
选择等待可执行文件被启动.
点击关闭.
添加象征性的断点
选择调试>断点>创建符号断点.
集象征来NSApplicationMain
.
要添加以下调试器命令,单击添加操作:
进程句柄-p true -n false -s false SIGSEGV SIGBUS
如果断点编辑器窗格消失,右键单击新断点并选择编辑断点…回到它
检查在评估行动后自动继续.
在MEX文件中设置断点
选择视图>航海家>显示项目导航.
点击yprime.c
在导航栏中。
单击要暂停执行的行旁边的gutter,例如,在中的第一行mexFunction ()
.
有关更多信息,请参阅Xcode文档。
开始Xcode调试和运行MATLAB
要启动调试器,请输入Xcode选择产品>运行.或者,单击运行按钮,它带有工作区窗口左上角附近的三角形图标。
等待Xcode显示消息等待MATLAB启动
在工作区窗口的顶部。此操作可能需要几秒钟,特别是第一次使用此过程时。
启动MATLAB可执行文件从Mac终端提示符(见从终端窗口开始)或从发现者。如果MATLAB已经在运行,右键单击Dock中的MATLAB图标并选择打开MATLAB的附加实例.
Xcode显示的消息MATLAB:调试
.
运行二进制MEX文件MATLAB
在这个新的MATLAB实例中,将当前文件夹更改为带有yprime
文件并运行MEX文件。
workdir = fullfile (' / ',“用户”,“共享”,‘工作’);cd (workdir) yprime (1:4)
的Xcode调试器停止在yprime.c
在第一个断点。
此时,您可以遍历代码、检查变量等,但对于本练习,请选择继续从调试菜单。的执行yprime
完成和MATLAB显示:
Ans = 2.000 8.9685 4.0000 -1.0947
只要这个MATLAB实例继续运行,就可以重复执行MEX文件Xcode在您设置的断点处停止。
LLDB是可用的调试器Xcode在macOS系统。有关其使用的更多信息,请参阅与调试器一起提供的文档。
在这个过程中,>>
表示MATLAB命令提示符,并且%
代表一个Mac终端提示符。调试器提示符为(lldb)
.
这个例子调试yprime
没有Java的MEX文件®虚拟机(JVM™)。在这种模式下运行MATLAB可以最小化内存使用量并提高初始启动速度,但限制了功能。例如,不能使用桌面。
控件编译源MEX文件- g
选项,它构建包含调试符号的文件。在终端提示符下,输入:
% mex -g yprime.c
控件启动lldb调试器matlab
函数- d
选择:
% matlab -Dlldb
使用-nojvm
启动标志:
(lldb) -nojvm运行
在MATLAB中,使用dbmex
函数并运行MEX文件:
>> dbmex on >> yprime(1,1:4)
调试器捕获用户定义的信号,提示符返回到lldb。
现在可以开始调试了。
在以下位置设置断点通常很方便mexFunction
所以你在入口程序的开始处停止。
(lldb) b mexFunction
一旦遇到断点,就可以使用任何调试器命令来检查变量、显示内存或检查寄存器。要从断点开始,输入:
(lldb) c
在最后一个断点停止后,输入:
(lldb) c
yprime
完成和MATLAB显示:
Ans = 2.000 8.9685 4.0000 -1.0947
在MATLAB提示符中,输入以下命令将控制返回给调试器:
> > dbmex停止
或者,如果你已经完成了MATLAB的运行,输入:
> >退出
当你完成调试器时,输入:
(lldb)问
您返回到Terminal提示符。
要用JVM调试MEX文件,请先使用句柄SIGSEGV信号
和rt_signal_lease
过程的信号。启动MATLAB,在第一个指令处停止。
在Terminal提示符下,编译MEX文件并启动lldb调试器。
% mex -g yprime.c % matlab -Dlldb .c
MATLAB开始。
(lldb)进程启动
当这些进程信号出现时,告诉进程继续。
(lldb)进程句柄-p true -n false -s false SIGSEGV SIGBUS
您可以设置断点并执行其他调试器命令。