zoukankan      html  css  js  c++  java
  • Mex文件在VS2010中调试方法

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

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

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

          1、VC中编写Mex函数

      新建一个win32 dll 空项目。

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

      3、配置项目属性。  

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

      连接器 -> 附加库目录 加入MATLAB的 externlibwin32(win64)microsoft 路径。

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

      在Linker-General-Output File:改成

                       .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位,需要手工调整!

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

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

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

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

        在源代码Test.cpp里设置断点。
        在matlab工程里输入代码或者函数(即mexw32文件的文件名,这里为ProjectName),即会跳转到vs的断点处。
        然后按F10便可单步执行。
      6、每次修改MexFunction所在的.cpp文件后,重新编译生成解决方案前都需要先在matlab工程下clear一下,即
                          clear (ProjectName).mexw32
        注意:这步非常重要,因为matlab在调用该mex函数后还一直占用,未释放,必须要clear下,vs中才可重新编译生成解决方案。
      
      好的,按照以上方法就可以任意编写可调试的mex函数啦。
      调试成功后把(ProjectName).mexw32文件copy到任意matlab工程里,就可以像函数调用一样任意使用啦。
  • 相关阅读:
    Eureka与ZooKeeper 的比较(转)
    springcloud 与分布式系统(转载)
    jvm 分代回收算法通俗理解
    关于JVM调优
    Java常用的数据结构
    mysql数据库引擎(转载)
    java的堆栈通俗理解
    ArrayList 的实现原理
    hashMap 源码解读理解实现原理和hash冲突
    Sklearn库例子——决策树分类
  • 原文地址:https://www.cnblogs.com/hust-yingjie/p/5480658.html
Copyright © 2011-2022 走看看