matlab与C混合编程调试-vs2010+matlab2012a

        matlab 对于科学计算来说非常方便易用,但是效率不太高,尤其是一些自己写的未经优化的程序。可以将计算比较耗时的算法用C语言实现然后在matlab下调用,但关键是如何编写和调试。编写还好说,查看一下mex借口函数的用法应该跟编写普通函数差不多,只不过参数需要经过转换,转换时细心点,再加上有点C指针的基本功就能胜任。

       但是调试比较麻烦,之前一直以为是一件十分困难的事情,但是尝试之后才发现很简单

    我们要做的有以下几点

    1. 首先当然是编写一个C函数了(借用一个网上的简单例子)建立一个文件命名为 add.c 将下面的内容复制进去,然后放入一个文件夹,然后将matlab当前路径切换到

        add.c 所在的文件夹

  

// add.c
#include "mex.h" // 使用MEX文件必须包含的头文件// 执行具体工作的C函数
double add(double x,double y)
{
    return x + y;
}// MEX文件接口函数
void mexFunction(
int nlhs,
mxArray *plhs[],
int nrhs,
const mxArray *prhs[]) {
double *a;
double b, c;
plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
a = mxGetPr(plhs[0]);
b = *(mxGetPr(prhs[0]));
c = *(mxGetPr(prhs[1]));
*a = add(b, c);
}

 


2.在matlab 命令窗口输入 mex -g add.c -output add    -g 表示编译时加入调试信息,结果会生成add.mexw32.pdb文件如图所示,如果不加-g命令只会生成 add.mexw32文件

3.在打开vs2010 在顶端debug选项下选择attach to process选项进入




找到matlab进程,选择attach.然后自动关闭对话框,在vs中打开前面提到的add.c,然后再需要设置断点的地方设置断点如设置在下图中的位置,断点没有变红,没关系,接着进行。


4.在matlab同目录下写一个test.m文件,内容如下


5.在matlab下点调试按钮然后程序自动就跳到了刚才add.c设断点的地方且断点变红了.接下来就和调试C程序完全一样了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章