主要内容

在调试Mac平台

使用Xcode

这个例子展示了如何调试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_maci64MATLAB应用程序包中的可执行文件。完整路径的一个例子是/应用程序/ 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

LLDB是可用的调试器XcodemacOS系统。有关其使用的更多信息,请参阅与调试器一起提供的文档。

在这个过程中,>>表示MATLAB命令提示符,并且代表一个Mac终端提示符。调试器提示符为(lldb)

调试墨西哥人没有JVM

这个例子调试yprime没有Java的MEX文件®虚拟机(JVM™)。在这种模式下运行MATLAB可以最小化内存使用量并提高初始启动速度,但限制了功能。例如,不能使用桌面。

  1. 控件编译源MEX文件- g选项,它构建包含调试符号的文件。在终端提示符下,输入:

    % mex -g yprime.c
  2. 控件启动lldb调试器matlab函数- d选择:

    % matlab -Dlldb
  3. 使用-nojvm启动标志:

    (lldb) -nojvm运行
  4. 在MATLAB中,使用dbmex函数并运行MEX文件:

    >> dbmex on >> yprime(1,1:4)

    调试器捕获用户定义的信号,提示符返回到lldb。

  5. 现在可以开始调试了。

    在以下位置设置断点通常很方便mexFunction所以你在入口程序的开始处停止。

    (lldb) b mexFunction
  6. 一旦遇到断点,就可以使用任何调试器命令来检查变量、显示内存或检查寄存器。要从断点开始,输入:

    (lldb) c
  7. 在最后一个断点停止后,输入:

    (lldb) c

    yprime完成和MATLAB显示:

    Ans = 2.000 8.9685 4.0000 -1.0947
  8. 在MATLAB提示符中,输入以下命令将控制返回给调试器:

    > > dbmex停止

    或者,如果你已经完成了MATLAB的运行,输入:

    > >退出
  9. 当你完成调试器时,输入:

    (lldb)问

    您返回到Terminal提示符。

调试的墨西哥人JVM

要用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
  • 您可以设置断点并执行其他调试器命令。

相关的话题