vc和matlab混合调试mex文件
1.调试环境:vs2008,matlab2011a。
2.步骤:
(1)在matlab中通过 ”mex -setup“通过命令为matlab指定编译器,针对本人环境就是vs2008。这里如果出现找不到编译器的情况,可在”Would you like mex to locate installed compilers [y]/n?“选择n,然后从出现的编译环境中选择。安装顺序应是先vs,后matlab。
(2)创建MFC DLL工程,工程名MexDemo,按默认的选项就可以,不用作任何选择。
(3)MexDemo属性页,在链接器-输出文件中,把输出文件改为mexw32,64位的改为mexw64。
(3)工程创建完后,把所有有关的文件添加到工程中。文件内容包含"mexFunction()"函数的xxxmex.c文件,和这个.c文件中include的所有.h和.c文件。
(4)把所有的.c文件改名为.cpp,并在内容前面加入#include stdafx.h。
(5)打开MexDemo.def文件,加入”mexFunction“,格式如下:
(6)编译整个工程,调试工程,出现如下窗口时,点取消即可,这时在工程的debug文件下就会生成MexDemo.mexw32文件(工程有两个debug文件夹,生成在外面的。当然也可设置生成mexw32文件的位置)实际上也是dll文件,稍后matlab就是调用这个文件。
(7)打开matlab,不要打开多个matlab应用程序。
(8)在MexDemo工程中,选择工具-附加到进程,在打开的窗口选择Matlab,将在mexFunction函数中设置断点。如果没有先打开matlab,这步会找不到Matlab.exe项。设置的断点如果显示黄色感叹号,不能触及,不要理会,直接执行下步。
(9)在matlab中将断点设置在要调用mex文件的语句上,比如要执行的函数名是tmp(a1,a2),然后单击"Current Folder"目录选择框,将当前的工作目录转换到MexDemo工程的debug目录下,其中包含MexDemo.mexw32文件。
(10)在(9)中有可能会遇到个问题,就是MexDemo工程生成的MexDemo.mexw32文件的文件名与matlab要调用的mex文件的文件名不相同,出现无法执行的情况,可这样解决。在MexDemo的debug目录下,创建一个.m的文件tmp.m,在tmp.m文件中,加入一个函数,名称为MexDemo(a1,a2)。总的来说就是要让matlab执行mexw32文件,也可提前将工程名设置成函数的名字(这个没试过)。另外大家也可将mexw32 文件的生成目录设成matlab的当前目录相同,就可避免转换目录。
(11)点继续执行,MexDemo中mexFunction函数中的断点就可触发。
|