vs调试MEX文件

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

来自为知笔记(Wiz)

时间: 2024-12-24 21:52:47

vs调试MEX文件的相关文章

Mex文件在VS2010中调试方法

matlab里面无法单步调试mex函数,故需转到VS上面调试,这里采用VS2010. 参考网上很多人写的方法但都很乱,杂,试了多次都没有成功.今天终于解决了,现把方法记录下来. 1.VC中编写Mex函数 新建一个win32 dll 空项目. 2.添加源文件Test.cpp,编写MEX函数,MEX函数编写方法这里不赘述了. 3.配置项目属性. 打开项目属性配置页,C++ -> 附加包含目录 加入MATLAB安装目录下的 \extern\include 路径. 连接器 -> 附加库目录 加入MAT

MEX文件编写和调试

作者kaien,2010/02/16 以前我写过一篇文章,详细的介绍过MEX的格式,语法,编译,调试等.可惜记不清放在哪里了.而最近又用到MEX编程,所以只能重新温习一番.时间有限,只记下简要流程和注意事项,以便往后查询之需. 1. MEX的编写格式 写MEX程序其实就是写一个DLL程序,所以你可以使用C,C++,Fortran等多种编程语言来写. 编写MEX程序的编辑器可以使用MATLAB的代码编辑器,也可使用自己的C++编辑器,如VS2008等. 用 MATLAB的编辑器的好处是,MEX函数

在Visual Studio中开发Matlab mex文件,生成mexw64/mexw32

csunking贡献,2015-9-22 1712 1.   概述 通过使用C/C++与Matlab混合编程,既可以享受到C代码快速执行的速度,又可以方便的使用Matlab众多的库函数和强大的绘图功能.让Matlab调用C函数是通过DLL文件实现的,而这个DLL的开发过程不仅仅可以使用Matlab自带的mex命令,还可以使用VC++开发环境,使用VC有很多好处,一是让我回到了原来熟悉的开发环境中,二能够使用更加标准的C++编译器,第三点也是最爽的,可以使用VC强大的调试功能. 此次文档更新时使用

gdb调试core文件

什么是Core Dump?Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考.core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core

linux系统产生和调试coredump文件

系统配置了coredump后,当程序异常终止时操作系统会在指定的目录下按指定的文件名格式产生一个core文件.core文件是程序内存映像以及相关的调试信息,通过gdb调试coredump文件可以知道导致程序异常终止的原因. 1.系统配置coredump 首先是打开coredump,通过ulimit命令看coredump是否开启: [[email protected] coredump]# ulimit -a core file size (blocks, -c) unlimited data s

Linux下交叉编译gdb,gdbserver+gdb的使用以及通过gdb调试core文件

交叉编译gdb和gdbserver 1.下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/按照一般的想法,最新版本越好,因此下载7.2这个版本.当然,凡事无绝对.我们以gdb-7.2.tar.bz2 这个文件为例.2.解压缩: $ tar jxvf gdb-7.2.tar.bz2 注:小技巧:Linux下一般压缩文件后缀为.tar.bz2和.tar.gz,它们解压命令有两三个选项是一致的: xf(v),前者再加上j选项,后者再加上z选项. 3.进入该目录 $ cd g

VC6.0 调试.dll文件

对于自己制作的.DLL文件,一直没有比较好的调试方法,其实是知道的太少. 下面就说说VC6.0下面 怎么调试DLL文件: 首先得有一个调用DLL文件的可执行程序,然后调用这个可执行程序. 在工程上 右键  settings  在弹出的对话框中,选择debug标签,然后设置executable for debug session:  在这里面填写可执行程序的路径 eg:C:\Program Files\Java\jdk1.6.0_15\bin\java.exe Working directory 

解决gdb 调试 core 文件函数名显示为问号的问题

关于gdb调试core文件总是一堆问号的问题 问题描述:已经在编译选项中加入了-g,但是查看core文件时,还是一堆问号,使用的命令为:gdb -c core 解决方案:由于gdb -c core这样的使用在有些系统下支持不是很好,所以推荐用如下两种方法: 1) gdb exe (gdb) core-file core 2) gdb -c core (gdb) file exe

ubuntu系统下cmake 编译matlab中mex文件

cmake 编译工程具有独特的优势,特别对于复杂的工程更是如此.利用matlab直接编译mex文件时,对于文件数据多的工程时,需要列举所有文件,并且要按照依赖关系排序,这些都是直接采用matalb编译mex的缺点. 下面通过一个简单的加法函数例子,说明如何利用cmake编译生成mex文件.如何对系统动态库进行设置,使matlab能够正常调用mex函数. 首先说明如何生成mex文件. 本例首先利用add.h.add.cpp文件编译生成add.so动态文件库,然后利用mian.cpp文件调用add.