Mex文件在VS2010中调试方法

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

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

1、VC中编写Mex函数

  新建一个win32 dll 空项目。

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

  3、配置项目属性。  

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

  连接器 -> 附加库目录 加入MATLAB的 \extern\lib\win32\microsoft 路径。

  连接器 -> 输入 -> 附加依赖项 输入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工程里,就可以像函数调用一样任意使用啦。

  [参考]

  1、VS2010中C++创建图解

  2、Matlab中MEX文件的编写与调试

时间: 2024-12-28 12:54:29

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

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

<如何让TT T4模板输出多个文件(VS2010中)>-- access911.net 文章 问题:   VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何编程让一个tt文件可以输出多个结果文件. 回答:   <#@ Import Namespace="System.Text" #> <#@ import namespace="System.IO" #> <#@ Import Namespace=

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

如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce.首先我们必须要安装,接下来如何使用memcache,在这里介绍下在linux下安装和windows下安装如下及配置: 一. linux下的Memcache安装: 1.下载memcache的linux版本,注意 memcached 用 libevent 来作事件驱动,所以要先安装有 libevent. 2. 安装 pecl::memcache. 用 pecl 命令行工具安装

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

自己手动添加的.ui文件在VS中是无法右键编译的,也即是说,在用QT designer编辑过的.ui文件无法实时更新相应的ui_XX.h文件,造成调试结果无法显示编辑过的新界面. 解决办法: 右键.ui文件属性:改自定义生成工具,应用,在常规里按照自己相应的文件和路径输入: 命令行:setlocalD:\qt\5.5\msvc2010\bin\uic.exe  -o  "F:/AA/BB/CC/bin/ui_XX.h"  "F:/AA/BB/CC/XX.ui"if

C#中 dll文件放在子目录中的方法

VS2012-C# dll文件直接放在程序根目录中(和exe文件一起)比较乱,可以将dll文件放在子文件夹中.步骤如下: 1.将dll文件放入子文件夹 2.添加引用 解决方案资源管理器中,中 工程名或者“引用”上右键,选中添加引用. 中引用管理器中,点击浏览,选中子文件夹中的dll文件. 3.修改dll文件的引用属性 点击添加成功的引用,将“复制本地”改成false(不然程序运行的时候会将子文件夹下的dll文件复制到根目录中). 4.添加引用的地址,修改config文件 在根目录中打开“软件名.

【转】对信息学竞赛中调试方法的建议

信息学之于其他竞赛学科的不同,就在于需要通过写程序来表达自己的思维和想法.如何尽可能又快又好地调试程序,成了我们必须要思考的问题.相信很多同学都有过这样的经历:思考一个算法只花了半个小时,但是把这个算法写对却花了一天..思考与实现的时间往往不成正比. 下面是我结合自己的经验给出的一些小建议,仅供大家参考,如果有不太好的地方,也欢迎指正~ 关于调试有一个大前提,就是思考的方向一定得严谨正确,因为思考决定实现,如果思考的时候有漏洞,那么实现的程序肯定也不强健.在想出算法之后不要急着实现,一定要认真反

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

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

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

这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和运行结果.获取所有的方法使用Class类中getMethos()方法. 待获取的类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package

VS2010中&lt;无法打开包括文件:“iostream.h”:&gt;错误解决方法

C/C++ code? 1 2 #include <iostream.h> 改为: C/C++ code? 1 2 #include <iostream> using namespace std; VS2010中<无法打开包括文件:"iostream.h":>错误解决方法

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

在VS2010中编译C#工程时,在C#的Project的属性界面的Build选项卡中当Configuration : Relese 时,依然会生成扩展名为.vhost.exe和.pdb文件. 其中.pdb是debug时使用的debug database文件;.vhost.exe是从VS2005开始的VS host process 不生成.vshost.exe文件的步骤如下图:打开工程属性的Debug标签选项卡,将Configuration选择为Relese , 去掉 Enable the Vis