vs调试MEX文件

http://www.cnblogs.com/lukylu/p/4042306.html

matlab里面没法单步调试mex函数,故需转到VS上面调试,这里采用VS2010。html

  参考网上不少人写的方法但都很乱,杂,试了屡次都没有成功。今天终于解决了,现把方法记录下来。函数

      一、VC中编写Mex函数spa

  新建一个win32 dll 空项目。线程

  二、添加源文件Test.cpp,编写MEX函数,MEX函数编写方法这里不赘述了。调试

  三、配置项目属性。  htm

  打开项目属性配置页,C++ -> 附加包含目录 加入MATLAB安装目录下的 \extern\include 路径。blog

  链接器 -> 附加库目录 加入MATLAB的 \extern\lib\win32(win64)\microsoft 路径。get

  链接器 -> 输入 -> 附加依赖项 输入libmx.lib libeng.lib libmat.lib libmex.lib 这四个lib文件。编译器

  在Linker-General-Output File:改为it

                   .\Debug\(ProjectName).mexw32(mexw64)(64位系统相应改为64)

  Source Files- Add - New Item新建模块定义文件Test.def

  并为其添加内容

          LIBRARY ;"Test"
          EXPORTS mexFunction

  在Linker-Input-Module Definition File添加:Test.def

matlab是 64位的话,VS编译器必须为64位,须要手工调整!

  四、F7生成解决方案,若是以上都正确,便会在工程Debug目录下生成一个(ProjectName).mexw32文件。

  五、在VS中单步调试MEX函数。

    将matlab的current folder 设置成mexw32文件所在的路径,即Debug目录。(这步很是重要,要不没法调试调用)

    vs2010-Tools-附加到线程 Attach to process-选择matlab。

    在源代码 Test.cpp里设置断点。
    在matlab工程里输入代码或者函数(即mexw32文件的文件名,这里为ProjectName),即会跳转到vs的断点处。
    而后按F10即可单步执行。
  六、每次修改MexFunction所在的.cpp文件后,从新编译生成解决方案前都须要先在matlab工程下clear一下,即
                      clear (ProjectName).mexw32
    注意:这步很是重要,由于matlab在调用该mex函数后还一直占用,未释放,必需要clear下,vs中才可从新编译生成解决方案。
  
  好的,按照以上方法就能够任意编写可调试的mex函数啦。
  调试成功后把(ProjectName).mexw32文件copy到任意matlab工程里,就能够像函数调用同样任意使用啦。


相关文章
相关标签/搜索