码迷,mamicode.com
首页 > 编程语言 > 详细

在Visual Studio中调试C/C++ mexFunction文件

时间:2015-12-22 10:20:31      阅读:1513      评论:0      收藏:0      [点我收藏+]

标签:

C/C++ MEX文件:也称为MEX源码文件,就是就是普通的fortran/C/C++文件,只是其中定义了一个mexFunction的接口,用于和MATLAB通讯,使用mex()函数可以将其编译为MATLAB MEX文件。至于如何书写mex源码文件,您可以看下MATLAB的帮助文档!  


MATLAB MEX文件:也称为MEX二进制文件,是一种动态链接库,可以在MATLAB像普通函数一样直接调用或运行,windows平台下的扩展名为mexw32或者mexw64。使用mex()可以将MEX源码文件编译成mexw32,使用Coder工具箱可以将M文件编程mexw32。 

 
mex()函数:MATLAB自带函数,用来将MEX源码文件编译成MEX二进制文件。  
MEX函数库:在MEX源码文件中调用的MATLAB函数,主要进行和MATLAB的一些交流。  
MX矩阵库:MATLAB为C/C++等提供了一些矩阵操作的库函数。  


很多人都知道,使用mex()函数将C/C++源码文件编译成可以在MATLAB中直接运行的二进制mex文件。但是没有注意到还可以对生成的mex文件在Visual Studio进行调试!  


Windows平台上调试 
在Visual Studio 2010平台上就可以调试C/C++源码MEX文件,楼主是用的是Visual Studio 2010,下面进行图解说明
(1)选择Visual C++ 2010作为默认编译器,在MATLAB命令行输入:>> mex -setup 

 Welcome to mex -setup.  This utility will help you set up a default compiler.

For a list of supported compilers, see 

http://www.mathworks.com/support/compilers/R2012a/win32.html

(2)直接回车,MATLAB自动搜索系统中编译器。Please choose your compiler for building MEX-files:  
Would you like mex to locate installed compilers [y]/n? 

Select a compiler:  
 [1] Intel Visual Fortran 12.0 (with Microsoft Visual C++ 2010 linker) in C:\Program Files\Intel\ComposerXE-2011\  

 [2] Lcc-win32 C 2.4.1 in D:\Program\MATLAB\R2012a\sys\lcc 

 [3] Microsoft Visual C++ 2010 in D:\Program\Visual Studio

[0] None 

(3)楼主系统中安装两个编译器,其中Intel Visual Fortran是Fortran编译器,Visual C++ 2010是C/C++编译器。而LCC-Win32是MATLAB自带的C编译器(只能编译C,不能编译C++),不是楼主安装的。

输入3,回车表示选择Visual C++ 2010作为C/C++默认编译器。Compiler: 3 

 Please verify your choices:  
Compiler: Microsoft Visual C++ 2010   Location: D:\Program\Visual Studio 

(4)直接回车,确定并完成您的配置。Are these correct [y]/n?  
*************************************************************************** Warning: MEX-files generated using Microsoft Visual C++ 2010 require            that Microsoft Visual Studio 2010 run-time libraries be            available on the computer they are run on.  

            If you plan to redistribute your MEX-files to other MATLAB             users, be sure that they have the run-time libraries.   ***************************************************************************  

Trying to update options file: 

C:\Users\Dynamic\AppData\Roaming\MathWorks\MATLAB\R2012a\mexopts.bat From 
template:             
D:\Program\MATLAB\R2012a\bin\win32\mexopts\msvc100opts.bat  
Done . . . 
**************************************************************************  
 Warning: The MATLAB C and Fortran API has changed to support MATLAB          variables with more than 2^32-1 elements.  In the near future  ??            you will be required to update your code to utilize the new  ??            API. You can find more information about this at:  
   http://www.mathworks.com/help/techdoc/matlab_external/bsflnue-1.html  ??            Building with the -largeArrayDims option enables the new API. 

************************************************************************** 
(5)使用-g开关编译yprime.c MEX源码文件,用于后面的调试。mex -g yprime.c 此时当前目录下会生成一个yprime.mexw32文件,楼主的计算机是32位的,如果您是64位的操作系,那将生成一个yprime.mexw64的文件。 
(6)启动Visual Studio,注意不要退出MATLAB,否则您会找不到相关进程的。 

(7)在Visual Studio中进行菜单操作,Tools→Attach to Process...

(8)在Attach to Process对话框中,选择MATLAB进程,点击“Attach(A)”按钮。

(9)此时VS会自动加载所有相关数据,菜单操作,File→Open→File...选择MATLAB当前工作目录中的yprime.c文件。

(10)您可以在yprime.c中任意设置断点,一般我们喜欢在mexFunction的开始位置就给一个断点。

(11)在MATLAB中运行MEX二进制文件,比如输入:yprime(1,1:4) 

(12)程序会自动运行到VS中设置断点的位置,此时我们可以进行任何Visual Studio中的调试工作,比如查内存,看地址,读数据等等。

(13)点击菜单操作,Debug→Contiue,将程序执行完毕,MATLAB命令窗口会显示如下内容: 

>> yprime(1,1:4)  

ans =  

2.0000 

8.9685  

4.0000 

-1.0947

注意:如果您想将生成的mexw32文件发布给第三方,请重新使用mex()函数进行编译,使用-g开关生成的mexw32文件只能用于调试!

 

在Visual Studio中调试C/C++ mexFunction文件

标签:

原文地址:http://www.cnblogs.com/trace617/p/5065718.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!