• 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工程里,就可以像函数调用一样任意使用啦。
      [参考]

       

  • 相关阅读:
    ZEIT – Next.js
    Segment Open
    Segment Open
    analytics.js
    Web scraping with Nightmare.js | azurelogic.com
    技能树升级——Chrome Headless模式
    simple-headless-chrome
    simple-headless-chrome
    cyrus-and/chrome-remote-interface: Chrome Debugging Protocol interface for Node.js
    python
  • 原文地址:https://www.cnblogs.com/lukylu/p/4042306.html
Copyright © 2020-2023  润新知