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安装目录下的 \extern\include 路径。

  连接器 -> 附加库目录 加入MATLAB的 \extern\lib\win32(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工程里,就可以像函数调用一样任意使用啦。

Mex文件在VS2010中调试方法的更多相关文章

  1. 使用Memcache在PHP中调试方法的介绍及应用

    使用Memcache在PHP中调试方法的介绍及应用 如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce.首先我们必须要安装,接 ...

  2. 《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章

    <如何让TT T4模板输出多个文件(VS2010中)>-- access911.net 文章   问题:   VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何 ...

  3. qt5的.ui文件在VS2010中无法编译问题

    自己手动添加的.ui文件在VS中是无法右键编译的,也即是说,在用QT designer编辑过的.ui文件无法实时更新相应的ui_XX.h文件,造成调试结果无法显示编辑过的新界面. 解决办法: 右键.u ...

  4. C#同一项目中不同文件或类中的方法进行调用

    有两种方法,一是将被调用的类设置成静态类Static,这样就可以直接点出来了,二是将被调用的方法所在类设置成public,这几必须在调用类中先将被调用的类进行实体化,new()出来,再点出来. 一. ...

  5. 转 Visual C++6.0 与matlab联合编程(2)----Visual C++6.0 环境下编译和调试MEX文件

    我的最初想法是利用matlab的mex命令调用C++程序生成动态链接库的,但是测试程序(文中另附)通过了,自己的实际应用程序却没有过.还是把方法贴在这儿,以便自己以后进行整理. http://shij ...

  6. VC 编译 MATLAB 的 mex 文件

    VC 编译 MATLAB 的 mex 文件mex 文件是 MATLAB 调用其他程序设计语言程序或算法的接口.在 Windows 环境中,mex 文件是扩展文件名为 DLL 的动态链接库,可以在 m ...

  7. Java反射机制demo(五)—获得并调用一个类中的方法

    Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...

  8. 如何在VC++ 中调试MEX文件

    MEX文件对应的是将C/C++文件语言的编写之后 得到的相关文件加载到Matlab中运行的一种方式, 现对于Matlab 中的某些程序运行效率而言, C/C++ 代码某些算法的领域上面执行效率很高,若 ...

  9. VS2010中配置C#Project不生成.vhost.exe和.pdb文件的方法

    在VS2010中编译C#工程时,在C#的Project的属性界面的Build选项卡中当Configuration : Relese 时,依然会生成扩展名为.vhost.exe和.pdb文件. 其中.p ...

随机推荐

  1. iOS开发——OC基础-ARC、BLOCK、协议

    一.ARC ARC 是一种编译器特性!而不是IOS运行时特性,和JAVA中得垃圾回收机制完全不一样ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的 ...

  2. iOS项目目录结构

    一. 目前最为流行的目录结构是: <先根据模块后根据功能> 的文件目录结构 优点: 模块分明, 并且开发和维护时方便查阅各个功能 缺点: 可能会出现模块内随意建立文件夹, 导致局部逻辑紊乱 ...

  3. 跟着百度学PHP[4]OOP面对对象编程-13-魔术方法__set(),__get(),__isset(),__unset()

    __set() 在对象访问私有成员的时候自动被调用,达到了给你看,但是不能给你修改的效果!(在对象访问一个私有的成员的时候就会自动的调用该魔术方法) __get() 方法用于获取私有属性值.(在设置私 ...

  4. 跟着百度学PHP[4]-OOP面对对象编程-1-什么是面对对象编程

    该阶段学习参考:http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/10/1823042.html 面向对象编程(Object Orie ...

  5. caffe学习系列(5):激活层介绍

    参考:http://www.cnblogs.com/denny402/p/5072507.html 主要介绍了各个激活函数.

  6. Git的维护(git gc和git fsck)

    原文: http://gitbook.liuhui998.com/4_10.html 一.保证git良好的性能 在大的仓库中, git靠压缩历史信息来节约磁盘和内存空间. 压缩操作并不是自动进行的, ...

  7. 手动fsck修复

    [转自]http://blog.chinaunix.net/uid-26719405-id-3781541.html 由于硬盘常年读写,系统会造成系统文件损坏,导致重启后无法登陆到系统, fsck不仅 ...

  8. ios中的RunLoop 和 android 中的Looper

    今天写android程序,用到了Handler,晚上回来查阅资料,发现了Looper这个概念. 看了一下网上关于Looper的资料,发现这个Looper跟ios中的Runloop基本的理念完全一致! ...

  9. 15. javacript高级程序设计-Canvas绘图

    1. Canvas绘图 HTML5的<canvas>元素提供了一组JavaScript API,让我们可以动态的创建图形和图像.图形是在一个特定的上下文中创建的,而上下文对象目前有两种. ...

  10. Java中的Comparable接口和Comparator接口

    Comparator位于包java.util下,比较器,是在集合外部定义排序.Comparable位于包java.lang下,代表当前对象可比较的,是在集合内部实现排序. Comparable代表一个 ...