vs2010下调用matlab2012b调试方法
Matlab代码调试技巧

Matlab代码调试技巧在科学计算领域,Matlab是一款功能强大的软件工具,广泛应用于数据分析、图像处理、数值模拟等众多领域。
然而,编写和调试Matlab代码并不总是一帆风顺。
本文将介绍一些Matlab代码调试的技巧,帮助开发者有效地解决问题,提高代码质量和性能。
一、使用断点调试断点调试是调试过程中最常用的方法之一,它允许开发者在代码的某一行设置断点,并在程序运行到该行时暂停执行,以便观察变量的值、调用堆栈等信息。
在Matlab中,可以通过在编辑器左侧的行号处单击设置断点,或者使用命令"dbstop"在代码中指定断点。
一旦程序运行到断点处,可以使用命令行窗口检查变量的值,或者逐步执行代码。
二、调试输出在调试过程中,输出语句是另一种有用的调试工具。
Matlab中的"disp"函数可以用于打印变量的值或调试信息。
通过在关键位置添加输出语句,可以追踪代码的执行流程,并监视变量的变化。
例如,以下代码段演示了如何使用输出语句调试一段计算平均值的代码:```matlabdata = [1, 2, 3, 4, 5];sum = 0;for i = 1:length(data)sum = sum + data(i);disp(['Current sum: ', num2str(sum)]);endaverage = sum / length(data);disp(['Average: ', num2str(average)]);```通过添加输出语句,我们可以观察每次迭代的累加和和最终的平均值,帮助我们找到代码中的错误并进行调试。
三、使用条件断点在某些情况下,我们只在满足特定条件时才希望暂停执行代码。
Matlab的条件断点功能可以在满足条件时触发断点。
通过在断点的设置菜单中选择"Edit Breakpoint Condition",我们可以指定一个条件,只有在该条件成立时才会中断程序执行。
VB调用MATLAB步骤

a = Val(Text1.Text)
b = Val(Text2.Text)
Call hh.myadd(1, c, a, b) 'myadd为MATLAB中的函数名,1为输出变量个数,c为输出变量定义为variant型,a,b为输入变量,定义为double型
Y=a+b;
VB程序如下:
Private Sub Command1_Click()
Dim hh As New ABC.ab 'ABC 为COMPONENT NAME,ab为class name
Dim a As Double ‘输入参数
Dim b As Double ‘输入参数
3.matlab会列出所有电脑上所有的编译器,选择Microsoft Visual C/C++ version 6.0
4.The default location for Microsoft Visual C/C++ compilers is C:\Program Files\Microsoft Visual Studio, but that directory does not exist on this machine
Use C:\Program Files\Microsoft Visual Studio anyway [y]/n? 选择n
5.Please enter the location of your compiler: [C:\Program Files\Microsoft Visual Studio] 键入vc++6的安装位置E:\INSTALLBACK\Microsoft Visual Studio vc6.0
解决matlab202b找不到编译器的问题

解决Matlab2012b找不到编译器的问题+解决补丁!matlab在关联编译器的时候,会出现找不到编译器的问题,原因是matlab要找windows sdk的mt.exe,找不到,必然报错. 因为vs2012在安装时,windows sdk的mt.exe位置变了,可能matlab还是按照老的路径找,肯定找不到(原来在windows sdks下面,现在在windows kits下面).matlab在关联编译器的时候,会出现找不到编译器的问题,原因是matlab要找windows sdk的mt.exe,找不到报错的.因为vs2012在安装时,windows sdk的mt.exe位置变了,而matlab还是按照老的路径找,肯定找不到(原来在windows sdks下面,现在在windows kits下面).如果你的环境是64位windows,并且vs2012装在默认目录下,matlab是64位版本,那么直接使用附件的文件,把他们添加到matlab/bin/win64下面的相关目录下即可,一个4个文件,放在2个目录.如果你的vs目录不是默认的,或者是32位版本,或者vs版本不是2012,那么需要修改附件里面的相关目录的设置(其实就是cl.exe和mt.exe的目录位置),我修改的方法是直接设置成目标目录(默认安装的位置),不是读注册表,这样简单,也无需修改注册表,以及建立什么目录链接(mklink).当然如果你的mt.exe目录不在Windows kits下,那需要修改附件的文件.附件里有一个word文件,是我修改的标识,当做帮助来用.使用方法,11 把附件相关的4个文件添加到matlab/bin/win64下面的2个相关目录2 在matlab里面运行mbuild -setup, 然后选y, 再选择2012的那个项目,再选y3 这是应该成功了4 mex -setup也是一样的.有一个奇怪的情况,就是.stp文件必须直接修改,我在桌面修改,然后覆盖到matlab目录后,其实并没有覆盖,还是原来的文件. 修改时要注意.大家从这下载解决补丁吧!How can I use Microsoft Visual C++ 2010 to create MEX files with MATLAB 7.10 (R2010a)?官网解决方案:Solution:The Microsoft Visual C++ 2010 compiler is not supported on the released version of MATLAB 7.10 (R2010a), but support can be added by installing a patch. To install the patch:1. Download the patch attached to this Solution. The patch includes files needed to support these combinations of MATLAB and Visual C++ 2010:?Visual C++ 2010 Professional and 64-bit MATLAB 7.10 (R2010a)?Visual C++ 2010 Professional and 32-bit MATLAB 7.10 (R2010a)? Visual C++ 2010 Express (Windows SDK 7.1 also required) and 64-bit MATLAB 7.10 (R2010a)? Visual C++ 2010 Express and 32-bit MATLAB 7.10 (R2010a)2. Launch MATLAB 7.10 (R2010a). If running on Windows Vista or Windows 7 run as administrator by right-clicking on the MATLAB shortcut and choosing "Run As Administrator". This permits modification of files in the MATLAB installation path.3. Confirm that you are running MATLAB 7.10 (R2010a). You can check this using the About box available at Help->About MATLAB.4. Unzip the contents of the patch into your MATLAB installation using the following command on the MATLAB command window.unzip(path_to_zip_file, matlabroot);This command will automatically unzipped the files in the correct folder and you do not have to worry about placing them in correct folder.5. Set up MEX to use Visual C++ 2010 with the command:mex –setupVisual C++ 2010 should now be among the listed options.Note that this patch will only work with MATLAB 7.10 (R2010a). Using this patch with any version of MATLAB is not supported.Other MathWorks products such as Real-Time Workshop do not support Visual C++ 2010.Refer to for up-to-date information concerning supported compilers. Related Documents/Files:具体操作方式:>> mex -setupWelcome to mex -setup. This utility will help you set upa default compiler. For a list of supported compilers, seePlease choose your compiler for building MEX-files:3Would you like mex to locate installed compilers [y]/n? ySelect a compiler:[1] Microsoft Software Development Kit (SDK) 7.1 in C:\Program Files(x86)\Microsoft Visual Studio 10.0[0] NoneCompiler: 1Please verify your choices:Compiler: Microsoft Software Development Kit (SDK) 7.1Location: C:\Program Files (x86)\Microsoft Visual Studio 10.0Are these correct [y]/n? y*************************************************************************** Warning: MEX-files generated using Microsoft Windows Software DevelopmentKit (SDK) require that Microsoft Visual Studio 2010 run-timelibraries be available on the computer they are run on.If you plan to redistribute your MEX-files to otherMATLAB users, be sure that they have the run-time libraries.***************************************************************************Trying to update options file:C:\Users\Administrator\AppData\Roaming\MathWorks\MATLAB\R2012b\mex opts.batFromtemplate: C:\PROGRA~1\MATLAB\R2012b\bin\win64\mexopts\mssdk71opts.batDone . . .************************************************************************** Warning: The MATLAB C and Fortran API has changed to support MATLAB variables with more than 2^32-1 elements. In the near futureyou will be required to update your code to utilize the newAPI. You can find more information about this at:Building with the -largeArrayDims option enables the new API.**************************************************************************5。
VS2010调用Matlab引擎的简单例子

engClose(ep); //关闭Matlab引擎。
}
5
6
无法调试。
mxArray*xx =mxCreateDoubleMatrix(1,N,mxREAL);
mxArray*yy=mxCreateDoubleMatrix(1,N,mxREAL); //同上。
memcpy(mxGetPr(xx), x, N*sizeof(double)); //将数组x复制到mxarray数组xx中。
using namespacestd;
intmain()
{
constintN = 50;
double x[N],y[N];
intj = 1;
for (inti=0;i<N;i++) //计算数组x和y
{
x[i] = (i+1);
y[i] = sin(x[i]) + j * log(x[i]); //产生-之间的随机数赋给xx[i];
memcpy(mxGetPr(yy), y, N*sizeof(double)); //将数组x复制到mxarray数组yy中。
engPutVariable(ep, "xx",xx); //将mxArray数组xx写入到Matlab工作空间,命名为xx。
engPutVariable(ep, "yy",yy); //将mxArray数组yy写入到Matlab工作空间,命名为yy。
或者直接从工具栏平台的下拉箭头下进入:
(2)增加x64平台
确定,得到如下结果。
3
项目属性——》VC++目录,如图:
包含目录增加:C:\Program Files\MATLAB\R2012b\extern\include
VS2010调用Matlab2012b引擎的设置方法

VS2010调用Matlab2012b引擎最近需要把matlab和VS结合起来使用,初来乍到出现了很多的麻烦,网上的资料大都也是matlab较低一些版本的,经过多方查找资料后,得以成功,现在总结出来,以方便读者们,避免走些弯路。
大家一起进步本人的平台是:win7旗舰版x64+VS2010(中文版)+Matlab2012b操作流程:1添加系统环境变量Win7的方法是在计算机中右击属性,然后选择左边的高级系统设置然后接着找到环境变量,设置系统环境变量,在系统环境变量中选择编辑,保持原有的内容不变,把光变移动到最后面,把matlab的地址写进去。
例如本人的安装目录是:D:\Program Files(86)\MATLAB\R2012b\bin\win64;,具体的位置由安装位置决定。
然后重新启动一下电脑,让刚刚设置的环境变量生效。
2在VS中新建一个编译平台(1)进入“配置管理器”由于本人的笔记本是64位的,所以不能用32位的系统编译平台,这点倒是废了很大的功夫,终于在网上找到了方法,再次表示感谢。
链接为/view/f87eee58804d2b160b4ec05b.html。
或者直接从工具栏平台的下拉箭头下进入:(2)增加x64平台确定,得到如下结果。
3添加头文件和库文件剩下的就是很常规的了,右击项目---属性---项目属性——》VC++目录,如图:包含目录增加:D:\Program Files(x86)\MATLAB\R2012b\extern\include库目录增加:d:\Program Files(x86)\MATLAB\R2012b\extern\lib\win64\microsoft 4. 此时还剩下最后一项设置,首先打开菜单项目->项目属性页选择配置属性->链接器->调试->生成调试信息改为是。
然后重新运行即可!!下面就可以编辑代码好好加油啦。
Matlab2012b调用Opencv中已定义的模块20130218

#include "mex.h" double add(double x, double y) { return x+y; } void mexFunction(int nlhs, mxArray *plhs[],int nrhs,const mxArray *prhs[]) { double a,b,*c; a=mxGetScalar(prhs[0]); b=mxGetScalar(prhs[1]); plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL); c=mxGetPr(plhs[0]); *c=add(a,b); }
(2) 对于库文件中已经定义的函数和类等模块时,在 C/C++文件中包含这个库文件,语句为 #pragma comment(lib, "opencv_calib3d243d.lib") #pragma comment(lib, "opencv_contrib243d.lib") #pragma comment(lib, "opencv_core243d.lib") #pragma comment(lib, "opencv_features2d243d.lib") #pragma comment(lib, "opencv_flann243d.lib") #pragma comment(lib, "opencv_gpu243d.lib") #pragma comment(lib, "opencv_highgui243d.lib") #pragma comment(lib, "opencv_imgproc243d.lib") #pragma comment(lib, "opencv_legacy243d.lib") #pragma comment(lib, "opencv_ml243d.lib") #pragma comment(lib, "opencv_objdetect243d.lib") #pragma comment(lib, "opencv_ts243d.lib") #pragma comment(lib, "opencv_video243d.lib") 并将上述所有的库文件从opencv的安装目录下找到拷贝至mex命令所要编译的文件相同的目 录下。 (3) 利用 mex 命令编译“*.cpp”文件就可获得“*.mexw64”文件。 (4) 例子 #include "mex.h" #include "cv.h" //#include "highgui.h" #include "highgui.h" #pragma comment(lib, "opencv_calib3d243d.lib") #pragma comment(lib, "opencv_contrib243d.lib") #pragma comment(lib, "opencv_core243d.lib") #pragma comment(lib, "opencv_features2d243d.lib") #pragma comment(lib, "opencv_flann243d.lib") #pragma comment(lib, "opencv_gpu243d.lib") #pragma comment(lib, "opencv_highgui243d.lib") #pragma comment(lib, "opencv_imgproc243d.lib") #pragma comment(lib, "opencv_legacy243d.lib") #pragma comment(lib, "opencv_ml243d.lib") #pragma comment(lib, "opencv_objdetect243d.lib") #pragma comment(lib, "opencv_ts243d.lib")
VC2010在win764位系统下调用MATLAB2012a(2010a以后)的设置方法

VS2010与Matlab2012a混合编程(Alex-liu版,哈哈)套用今天的签名“最新的VS+最新的MATLAB+最新的WINDOWS=无尽的烦恼”,用了一天的时间去配置相关的环境,确实很囧。
好在现在问题解决了,特发布过程如下,希望能给有需要的朋友带来帮助。
注:因为程序也是刚调通,所以有些原因还没有仔细分析,如果不对,敬请指教。
1.<MATLAB>表示MATLAB按照目录2. 配置过程中的错误,请见:附录3.文中包含"只针对64位WINDOWS"字眼设置的,在WIN32(X86)环境无需设置4.本文配置中可能包含多余的一些配置,不过现在的目的是运行成功哈~~~至于精简部分,待我和大家使用时慢慢研究。
/*******************************************环境:1.VS20102.MATLAB2012a3.WINDOW 7 (X64)******************************************/1.Matlab环境设置要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
虽然生成的可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行。
但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。
在Matlab的Command Window 下输入命令mbuild –setup操作过程如下图:然后输入命令mex –setup以类似的方法配置编译器。
MATLAB2012b与vs2010相互调用时的编译环境设置

MATLAB2012b与vs2010(vc++9.0)交叉调用时的编译环境设置不会游泳的鱼 于2013年11月在科研和学习中,经常遇到MATLAB运行比较慢,而VC++又需要所有工作都由自己从头做起的情况。
那么,在VC++和MATLAB中进行交叉调用就成为一种能够博采众长的好方法。
但是,如果要实现MATALB 和VC++之间的相互调用,必须要对两者的编译环境进行一些必要的设置。
目前网络上公开的相关资料都是针对旧版本的MATLAB和VC++编译器进行设置,本文依据笔者亲自实验的结果介绍对MATLAB2012b和VS2010进行设置的说明。
考虑到WIN7, 8系统(64位)使用的增加,本文在VS2010中特别标注了x64系统(64位)与x86系统(32位)在设置上的区别。
第一部分:MATLAB 2012b的编译环境设置首先,确保本机已经正确安装MATLAB2012b 和Visual Studio 2010 (旗舰版) 且包含VC++组件(默认版本9.0),并且获得全部使用授权。
其次, 在MATLAB 2012b中安装mbuild组件。
(1)在MATLAB 2012b的命令窗口中键入:mbuild –setup‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Welcome to mbuild ‐setup. This utility will help you set upa default compiler. For a list of supported compilers, see/support/compilers/R2012b/win32.htmlPlease choose your compiler for building shared libraries or COM components:Would you like mbuild to locate installed compilers [y]/n?‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ (2) 键入y并回车,MATLAB会显示当前系统已经安装的C和C++编译器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vs2010下调用matlab2012b调试方法
配置环境:
vs2010+matlab2012b+win7 64位
说明:
以安装路径“E:\Program Files\MATLAB\R2012b\”为例MATLAB外部支持文件夹:
E:\Program Files\MATLAB\R2012b\extern
matlab自带的c例程:
E:\Program
Files\MATLAB\R2012b\extern\examples\eng_matengine.h的位置:
E:\Program Files\MATLAB\R2012b\extern\include各种lib的位置:
E:\Program Files\MATLAB\R2012b\extern\lib\win64\microsoft 在matlab帮助中输入“C language”即可找到有关MATLAB Engine的一个页面。
从这个页面开始,学习各种关键词,
就能够找到一切你需要的资料。
使用MATLAB Engine一般用两套函数就可以了。
1.engXXXX,关于Engine本身的操作,包括打开/关闭,设置/取得变量,执行语句等等。
2.mxXXXX,关于数据类型mxArray的操作,与MATLAB 交互的左右类型全部为mxArray。
搭建过程:1.先在VC6的tools->options->directories里添加相关目录include files:
E:\Program Files\MATLAB\R2012b\extern\include
E:\Program
Files\MATLAB\R2012b\extern\include\win64library files:
E:\Program
Files\MATLAB\R2012b\extern\lib\win64\microsoft2 点击LInker input 将libmx.lib;libmex.lib;libeng.lib;加入到Additional Dependencies
或者用#pragma comment (lib, "libeng.lib")
#pragma comment (lib, "libmx.lib")
#pragma comment (lib, "libmex.lib") 语句
3 环境变量加上E:\Program
Files\MATLAB\R2012b\bin\win64 否则编译成功运行时会显示缺少dll
4包含头文件engine.h
5这就可以去调用engine里的一些引擎函数了做好这些后,如果我们环境一样,
下面的代码应该能够编通并且正常执行,
其中包含了常用的一些函数,
一般来说使用Engine的时候也就用这些了。
出现问题解决方法:
1 编译出现:
1>test.obj : error LNK2019: 无法解析的外部符号
_engClose,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_engSetVisible,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_mxDestroyArray,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_mxGetData,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_mxGetDimensions_730,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_mxGetNumberOfDimensions_730,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_engGetVariable,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_engEvalString,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_engPutVariable,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_mxGetPr,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_mxCreateDoubleMatrix_730,该符号在函数_main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号
_engOpen,该符号在函数_main 中被引用
1>D:\VSProjects\matlabtest\matlabtest\Debug\matlabtest.exe : fatal error LNK1120: 12 个无法解析的外部命令这个问题如果你按照上述配置好的话,这就很有可能出在兼容问题
上。
因为2012b只提供64位版本,所有需要将vs工程变为64位。
点击win32旁的下拉列表,选择配置管理器。
在活动解决方案平台这里选择x64即可。
重新编译一切ok。
2 如果vs工程中还包含其他库是32位的,那么只能装matlab7 ,他只支持32位。
而且matlab6.x版本又不支持vs2010.装好以后,需要配置兼容性。
然后点击其桌面的快捷方式,修改其兼容性,我的系统是win7,改成了兼容vista,保存修改,点击成功运行。