在Ubuntu下使用Eclipse调试mex源代码文件

由于科研需要,我经常在Ubuntu下使用MATLAB,在这里给大家介绍一个如何用Eclipse在Ubuntu下调试mex程序的方法。

我的电脑上安装有Nsight(NVIDIA推出的CUDA集成开发环境),而Nsight是基于Eclipse CDT构建的,因此这里就以Nsight为例讲解具体的调试方法。

首先编写一个简单的mex源程序helloMex.cpp,代码如下:

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    mexPrintf("Hello, mex!\n");
    mexPrintf("This is mex file.\n");
}

编写完成后,在MATLAB中执行如下命令编译生成可执行mex文件helloMex.mexa64:

mex -g helloMex.cpp

注意,mex命令中的 -g 选项不能省略,否则无法调试程序,具体原因可以查看MATLAB中的帮助文档。

打开Nsight,在Nsight下新建工程如下:
Nsight建立工程
注意 Toolchans 要选择 Linux GCC ,点击 Next,选择 Debug 配置,点击 FInish,工程创建完成。进行下面的步骤前要确保源程序被添加到工程中。

接下来进行调试。首先在源程序中的 mexPrintf("This is mex file.\n"); 这一行加上断点。然后,在工具栏上单击 Debug 按钮旁边的下三角箭头,在菜单中选择 Debug Configurations … ,打开Debug配置对话框,如下所示:
Debug 配置
在左边的列表中选中 C/C++ Attach to Application,在该选项下新建一个 Debug 配置,起名为 helloMex Debug ,之后在右边进行进一步的配置。在 Main 选项卡中,把 C/C++ Application 制定为刚刚生成的 helloMex.mexa64,最重要的是要确保 Disable auto build 被选中(因为该工程没有配置构建选项,如果使用默认设置会出现错误),调试器要设置为 GDB(DSF)。之后进入 Debugger 选项卡,将 Debugger 选中为 gdb(即使已经选中,这一步也需要执行一次,以确保调试器设置正确)。

接着点击 Debug 按钮,弹出 Select Processes 对话框,选择 MATLAB 所处的进程,如下所示:
选择挂入进程
点击 OK,进入调试模式(确保进入用于 Debug 的工作界面,否则无法进行后续操作)。由于 Nsight (或 Eclipse)在进入调试模式时会暂停程序的运行,因此这时候 MATLAB 程序是处于“僵死”的状态,这时候单击工具栏中的Resume 按钮(Resume),即可恢复 MATLAB 为运行状态。这时在 MATLAB 的命令窗口中调用 helloMex() ,Nsight 会让程序暂停在刚刚设置的断点处,如下所示:
调试状态
图中的红框处的信息表明 Nsight 已经在开始调试 mex 程序。

最后需要强调一下从调试模式退出的方法。在退出调试模式的时候,应该选择Disconnect 按钮(Disconnect)按钮,而不是Terminate 按钮(Terminate)按钮。Disconnect 只是把调试器与 MATLAB 断开连接而不会终止 MATLAB 程序。如果选择 Terminate,调试器与 MATLAB 会被同时 Kill 掉,这时就只能重新运行 MATLAB 了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值