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

    Mex文件在VS2010中调试方法

     

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

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

          1、VC中编写Mex函数

      新建一个win32 dll 空项目。

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

      3、配置项目属性。  

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

      连接器 -> 附加库目录 加入MATLAB的 externlibwin32microsoft 路径。

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

      在Linker-General-Output File:改成

                       .Debug(ProjectName).mexw32(64位系统相应改成64)

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

      并为其添加内容

              LIBRARY ;"Test"
              EXPORTS mexFunction

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

      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工程里,就可以像函数调用一样任意使用啦。
      [参考]
     
  • 相关阅读:
    linux运维 技能树
    ORACLE:毫秒与日期的相互转换,获取某天的信息
    Mybatis通用Mapper(转)
    Redis数据类型之散列类型hash
    Redis数据类型(字符串)
    Redis整理第三波(生存时间、事务管理)
    Redis整理第二波(启动、命令)
    非关系型数据库(NOSQL)-Redis
    冒泡排序,冒泡性能优化--java实现
    学习过的设计模式总结(分别从概念、分类、优缺点、应用、区别来说)
  • 原文地址:https://www.cnblogs.com/wjgaas/p/4994292.html
Copyright © 2011-2022 走看看