在Ubuntu下使用Eclipse调试mex源代码文件
2016-07-08 21:08
288 查看
由于科研需要,我经常在Ubuntu下使用MATLAB,在这里给大家介绍一个如何用Eclipse在Ubuntu下调试mex程序的方法。
我的电脑上安装有Nsight(NVIDIA推出的CUDA集成开发环境),而Nsight是基于Eclipse CDT构建的,因此这里就以Nsight为例讲解具体的调试方法。
首先编写一个简单的mex源程序helloMex.cpp,代码如下:
编写完成后,在MATLAB中执行如下命令编译生成可执行mex文件helloMex.mexa64:
注意,mex命令中的
打开Nsight,在Nsight下新建工程如下:
注意 Toolchans 要选择 Linux GCC ,点击 Next,选择 Debug 配置,点击 FInish,工程创建完成。进行下面的步骤前要确保源程序被添加到工程中。
接下来进行调试。首先在源程序中的
在左边的列表中选中 C/C++ Attach to Application,在该选项下新建一个 Debug 配置,起名为
接着点击 Debug 按钮,弹出 Select Processes 对话框,选择 MATLAB 所处的进程,如下所示:
点击 OK,进入调试模式(确保进入用于 Debug 的工作界面,否则无法进行后续操作)。由于 Nsight (或 Eclipse)在进入调试模式时会暂停程序的运行,因此这时候 MATLAB 程序是处于“僵死”的状态,这时候单击工具栏中的
(Resume),即可恢复 MATLAB 为运行状态。这时在 MATLAB 的命令窗口中调用
图中的红框处的信息表明 Nsight 已经在开始调试 mex 程序。
最后需要强调一下从调试模式退出的方法。在退出调试模式的时候,应该选择
(Disconnect)按钮,而不是
(Terminate)按钮。Disconnect 只是把调试器与 MATLAB 断开连接而不会终止 MATLAB 程序。如果选择 Terminate,调试器与 MATLAB 会被同时 Kill 掉,这时就只能重新运行 MATLAB 了。
我的电脑上安装有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下新建工程如下:
注意 Toolchans 要选择 Linux GCC ,点击 Next,选择 Debug 配置,点击 FInish,工程创建完成。进行下面的步骤前要确保源程序被添加到工程中。
接下来进行调试。首先在源程序中的
mexPrintf("This is mex file.\n");这一行加上断点。然后,在工具栏上单击 Debug 按钮旁边的下三角箭头,在菜单中选择 Debug Configurations … ,打开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),即可恢复 MATLAB 为运行状态。这时在 MATLAB 的命令窗口中调用
helloMex(),Nsight 会让程序暂停在刚刚设置的断点处,如下所示:
图中的红框处的信息表明 Nsight 已经在开始调试 mex 程序。
最后需要强调一下从调试模式退出的方法。在退出调试模式的时候,应该选择
(Disconnect)按钮,而不是
(Terminate)按钮。Disconnect 只是把调试器与 MATLAB 断开连接而不会终止 MATLAB 程序。如果选择 Terminate,调试器与 MATLAB 会被同时 Kill 掉,这时就只能重新运行 MATLAB 了。
相关文章推荐
- Ubuntu 默认壁纸历代记
- Ubuntu Remix Cinnamon 20.04 评测:Ubuntu 与 Cinnamon 的完美融合
- 关于Ubuntu 11.10启动提示waiting for the network configuration的问题
- 在 Ubuntu 桌面中使用文件和文件夹
- ubuntu下chrome无法同步问题解决
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- 使用 GNOME 优化工具自定义 Linux 桌面的 10 种方法
- 以Ubuntu 9.04为例 将工作环境迁移到 Linux
- VirtualBox虚拟机XP与宿主机Ubuntu互访共享文件夹
- 从USB安装Ubuntu Server 10.04.3 图文详解
- Ubuntu 15.04 正式版发布下载
- Linux-Ubuntu 10.04安装Cadence-ic610 方法总结图解
- MyEclipse Web Project转Eclipse Dynamic Web Project
- Windows Clang开发环境备忘
- Ubuntu 12.04和Windows 7双系统安装图解
- Ubuntu /home下中文目录如何修改成英文?
- 开机出现:grub rescue的修复方法
- Ubuntu连接Android真机调试
- 你应该选择 Ubuntu 还是 Fedora?