用vs2013测试输出窗口输出出现问题

查看: 7895|回复: 24|关注: 0
求助 VS2012 调用 MATLAB 2013a 编译生成的 DLL,初始化时出错
Matlab 函数是最简单的加法,
function [ c ] = MyAdd( a, b );
mcc -W lib:libMyAdd -T link:lib MyAdd.m
mcc -B csharedlib:libMyAdd MyAdd.m
VS C++ 项目里面的配置都已设置正确
void CMatlabDllTestDlg::OnBnClickedOk()
& & mclInitializeApplication(NULL, 0);
& & //libMyAddInitialize();
& & MessageBox(_T(&Load libMyAdd&));
& & //libMyAddTerminate();
& & mclTerminateApplication();
只做 mcl... 的相关初始化,软件不会挂掉,但会有如下警告信息
First-chance exception at 0xA16811C in MatlabDllTest.exe: Microsoft C++ exception: MathWorks::mcl::mclUserException at memory location 0x1CDDD0.
First-chance exception at 0xA16811C in MatlabDllTest.exe: Microsoft C++ exception: MathWorks::mcl::mclUserException at memory location 0x1CDDD0.
First-chance exception at 0xA16811C in MatlabDllTest.exe: Microsoft C++ exception: [rethrow] at memory location 0x0000.
First-chance exception at 0xA16811C in MatlabDllTest.exe: Microsoft C++ exception: [rethrow] at memory location 0x0000.
First-chance exception at 0xA16811C in MatlabDllTest.exe: Microsoft C++ exception: MathWorks::mcl::mclUserException at memory location 0x1CDDD0.
First-chance exception at 0xA16811C in MatlabDllTest.exe: Microsoft C++ exception: MathWorks::mcl::mclUserException at memory location 0x1CDDD0.
但把 lib... 的初始化打开,软件会挂掉,错误如附图,部分错误信息粘贴如下,
First-chance exception at 0xA16811C in MatlabDllTest.exe: Microsoft C++ exception: varflowFailedException at memory location 0x9240.
First-chance exception at 0xA16811C in MatlabDllTest.exe: Microsoft C++ exception: varflowFailedException at memory location 0x9240.
First-chance exception at 0xA16811C in MatlabDllTest.exe: Microsoft C++ exception: varflowFailedException at memory location 0x92C0.
First-chance exception at 0xA16811C in MatlabDllTest.exe: Microsoft C++ exception: varflowFailedException at memory location 0x92C0.
“MatlabDllTest.exe”(Win32): 已加载“D:\Program Files\MATLAB\R2013a\bin\win64\hgbuiltins.dll”。无法查找或打开 PDB 文件。
0xF6E60 (m_interpreter.dll) (MatlabDllTest.exe 中)处的第一机会异常: 0xC0000005: 读取位置 0x3A40 时发生访问冲突。
0xF6E60 (m_interpreter.dll) (MatlabDllTest.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x3A40 时发生访问冲突。
0xF6E60 (m_interpreter.dll) (MatlabDllTest.exe 中)处的第一机会异常: 0xC0000005: 读取位置 0x3A40 时发生访问冲突。
0xF6E60 (m_interpreter.dll) (MatlabDllTest.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x3A40 时发生访问冲突。
关注者: 1
“MatlabDllTest.exe”(Win32): 已加载“D:\Program Files\MATLAB\R2013a\bin\win64\hgbuiltins.dll”。无法查找或打开 PDB 文件。
注意,你的MatlabDllTest.exe是一个Win32可执行文件,而你的dll是win64的! MATLAB编译的DLL的比特值(32位或64位)和版本和MCR的要一致, 比特值和你VS里面创建的程序也要一样的才行!
确实 Matlab 是 x64 版本的,MatlabDllTest 的平台,在项目属性里面已配置为 x64 平台,如下图
电脑是 Win8 x64,Matlab 是 2013a 的 x64 版本,VS2012 旗舰版(这个是 x86 的版本)
VS 的项目配置中已选择为 x64 平台。
关注者: 1
lizhongjie 发表于
电脑是 Win8 x64,Matlab 是 2013a 的 x64 版本,VS2012 旗舰版(这个是 x86 的版本)
VS 的项目配置中已选 ...
??然后呢?错误信息?
另外,很奇怪的是,你的工程是C++还是C的?如果是C++的话,编译的命令应该是:mcc -W cpplib:libMyAdd -T link:lib MyAdd.m,而且,你VS的项目配置只初始化了application,没有初始化library。建议你看看帮助文档里的说明(在命令行里输入):web([docroot '/compiler/creating-a-shared-library-from-matlab-code.html'])
smallfade 发表于
??然后呢?错误信息?
另外,很奇怪的是,你的工程是C++还是C的?如果是C++的话,编译的命令应该是:m ...
完全参考 web([docroot '/compiler/creating-a-shared-library-from-matlab-code.html']) 的方法,也还是有问题。
情况大致如下,
deploytool 编译出来的内容,与 mcc -W cpplib:libmatrixp -T link:lib addmatrix.m eigmatrix.m multiplymatrix.m 编译的结果基本一致;
mbuild matrixdriver.cpp libmatrixp.lib 这个通过了,得到了一个 matrixdriver.exe 文件;
但是在 CMD 下执行的时候,提示程序意外终止;
在系统提示出错时,选择调试(VS2012)
关注者: 38
lizhongjie 发表于
完全参考 web([docroot '/compiler/creating-a-shared-library-from-matlab-code.html']) 的方法,也还是 ...
有个疑惑,如果有可能的话,把m代码用Matlab Coder生成C代码去用,会怎么样?
关注者: 1
本帖最后由 smallfade 于
10:09 编辑
lizhongjie 发表于
完全参考 web([docroot '/compiler/creating-a-shared-library-from-matlab-code.html']) 的方法,也还是 ...
检查下你的系统环境变量,Path里面的MATLAB或MCR是不是和你编译用的MATLAB一致。你用的命令是产生wrapper file的,我觉得和deploytool里面等价的命令应该是-B的参数,web([docroot '/compiler/using-matlab-build-options.html#btccfxv'])。
另外,我完全安装帮助文档里的操作的,得到的exe文件执行没有问题。还有就是,为什么要用命令行的形式。。。直接用deploytool就可以了啊。
柚籽 发表于
有个疑惑,如果有可能的话,把m代码用Matlab Coder生成C代码去用,会怎么样?
没试过。 ...
你说的这种应用方式与我所预期的架构有差别,我的计划是 MATLAB 专门做算法库,这样只要维持接口不变,我上层的界面应用程序与算法库就可以分开演进、独立开发。
smallfade 发表于
检查下你的系统环境变量,Path里面的MATLAB或MCR是不是和你编译用的MATLAB一致。你用的命令是产生wrapper&&...
你老人家的系统是否 C/C++ 开发环境和 Matlab 都是 x86 的版本啊,我现在有点担心是否会因为 VS2012 只有 x86 版本,而 Matlab2013a 是装了 x64 版本的。。。
我先检查你所说的部分,实在不行就换 Matlab2013a x86 的版本看看是否问题依旧。
站长推荐 /1
Powered byVS2013调试的时候老是出错-中国学网-中国IT综合门户网站
> VS2013调试的时候老是出错
VS2013调试的时候老是出错
转载 编辑:李强
为了帮助网友解决“VS2013调试的时候老是出错”相关的问题,中国学网通过互联网对“VS2013调试的时候老是出错”相关的解决方案进行了整理,用户详细问题包括:调试vs2013写了一小的win32程序,但是调试的时候老是出错不能继续走下去,提示"此模块的调试信息缺少源信息",请问下这样的问题怎么解决呢,如何让程序走下去,调试的时候不中断呢?之前的提示是缺少什么pdb符合文件,我网上搜索了下,在线加载微软提供的文件现在却成这样了,我调试的时候是F10逐过程走的。,具体解决方案如下:解决方案1:使用调试模式编译,而不是发布模式。还有检查下有没有外挂别的调试器或者国产劣质杀毒软件干扰。解决方案2:系统类库的函数一般不需要调试吧。你就直接调试你的代码就好了。你的项目要用debug模式编译。解决方案3:引用&1&楼&caozhy&的回复:使用调试模式编译,而不是发布模式。还有检查下有没有外挂别的调试器或者国产劣质杀毒软件干扰。谢谢版主来回答,我调试都是用的debug模式调试的&还有我的电脑是裸奔的&&没安装任何杀软的解决方案4:引用&2&楼&findcaiyzh&的回复:系统类库的函数一般不需要调试吧。你就直接调试你的代码就好了。你的项目要用debug模式编译。你好,我调试时用的debug模式调试的,我也知道库函数不要调试,但是我就是想完整的走过程调试一遍,看看整个流程,我也略懂点c#&,C#调试的时候是库函数就不会出现这样,而是直接运行到自己写的下一步执行的代码处,而win32还有MFC程序却很少纠结,老是这样中断,没法继续走下去解决方案5:我自己又用虚拟机安装了vs2015预览版,问题还是依旧呢通过对数据库的索引,我们还为您准备了:问:代码没有问题,windows8.1 6位4系统,F5出现第一个图(过期),之后出现...答:看下你项目中个项目文件(.h .cpp)的最后修改时间是否有不正常的。 检查下目录e:\Users\ConsoleApplication3\Debug===========================================问:“ConsoleApplication1.exe”(Win32): 已加载“D:\Documents\Visual Studio...答:不是错误信息!!!那些都是些调试信息, 程序正常运行了,只是窗口一闪而过,main返回值是0。===========================================问:代码是没错的,就是vs中间安装过一次更新,安完以后之前能调试的代码现...答:新建一个没有指针的最简单工程试试,如果依然如此,那么应该是更新安装失败了,推荐卸载VS重新装一个。 如果新建各种工程都没有这个问题,那么应该是更新后代码检查更严格了吧,单步调试看看哪里的报错。(也就是说,还是代码问题,不是调试可以...===========================================问:代码是没错的,就是vs中间安装过一次更新,安完以后之前能调试的代码现...答:scanf_s出的问题,用此函数,最后一个参数必须是缓冲区的大校你调用 方式不对。 可以把 scanf_s 换成 scanf===========================================问:我打开了2个VS,1个是旧程序,1个是新程序,先调试旧程序,生成后,把打...答:也不能算是bug吧,它就是默认你最开始调试的程序呗,你把它关掉才能刷新一次===========================================问:我打开了2个VS,1个是旧程序,1个是新程序,先调试旧程序,生成后,把打...答:额……在循环外面设一个断点,然后继续执行(而不是单步)就行了嘛。===========================================问:我打开了2个VS,1个是旧程序,1个是新程序,先调试旧程序,生成后,把打...答:重启vs或者重启电脑===========================================问:我首先写的代码如下: #include&string.h& #include&iostream& using na...答:重新生成解决方案===========================================问:但是如果我不进行调试,直接运行就可以执行,我的代码是最简单的输出 He...答:应该是权限问题吧,以管理员身份运行vs2013试试看=========================================== 很明星,提示您将 工程修改为使用Unicode模式!===========================================有几种可能。 一是生成出错,并未生成文件。 二是项目设置有问题,点击菜单"项目"-》XXX项目属性,检查常规、调试、链接器-》常规-》输出文件,看这几个关于输出文件的...===========================================可能的问题是你是成功编译文件而非成功生成项目直接点击菜单的本志windwos调试器按钮(或直接F5)如果成功的话会直接运行程序否则会报错,然后根据出错信息判断问题所在...===========================================你往往可在特定的操作顺序下重现错误。无效光标不一定总是0,因此错误提示中的内存... 让操作系统的安装程序重新拷贝正确版本的系统档案、修正系统参数。有时候操作系统...===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助Visual Studio内置有如此之多有用的调试特性,但并非众所周知。本文列举一些我的最爱,包括最近我在?VS2013?中发现的调试特性。
1.在Lambda表达式中的断点
如果你点击左边栏设置断点,你可能很容易被误导认为断点发生在行级别上。实际上,你可以在行内部插入断点,如在你的LINQ的Lamdba表达式中。仅需右击代码部分并且从菜单选择Breakpoint & Insert breakpoint。
2.便捷的输出窗口
输出窗口对调试很有用,同样断点也是弹出式或中断程序的,但它确实很嘈杂。仅需右击输出窗口(要确保输出被设为调试),关闭Module Load,Module Unload,Process Exit 和Thread Exit 以只输出你关心的内容。现在用Debug.WriteLine给出你真正关心的内容吧。
你也可以在输出窗口使用Ctrl-S保存设置。
3.在客户端和服务器端附加调试(VS2012)
服务器端和客户端工程在一个solution中是有用的,你仅需要一份Visual Studio运行时拷贝而且也不会在alt-tab键的前进后退中迷失,特别是当它们使用共同的代码如数据结构工程。
有一个缺点,start-up工程是唯一获得附加调试的工程。如果你遇到异常,它会显示在你的客户端,而不是服务端。
现在这个问题很容易解决了。右击solution,选择properties & Multiple startup projects,然后选择Start动作为你需要附加调试的工程。
4.创建可重建工程模板
如果你负责SDK或者API,创建一个你独用的简单的应用程序。然后使用File & Export template保存它。
现在你随时可以从你的模板创建一个新的工程,仅需要一些点击。更好的做法是使得用户和测试者能够使用它们,以便他们给你最小的重建。
5.使用DebuggerDisplay属性
调试器默认会使用ToString()来监视并在窗口正常输出类名。即使你重写ToString,对其他调试者也不见得一目了然。
在你的类中通过一句简单的表达式,而不是改变属性值来使用。例如:
[DebuggerDisplay("Order&{ID,nq}")
class&Order&{
&&&&public&string&ID&{&get&{&return&&}&}
“nq”阻止了双引号发散。你也可以在这里使用方法,但是别做任何可能带来微小副作用的事,否则你观察的对象可能改变其行为,并导致奇怪的事发生。
6.管理断点
你创建了一些带劲的断点,现在你要关闭其中的一个,因为它被点击了太多次,但你马上又要再次用到它。如果你删除了这个断点,你就不得不回来再找到断点位置。
打开常被忽视的Breakpoints窗口(Ctrl-Alt-B)。这个窗口显示了你设置的所有的断点但关键的是允许你使它们无效仅仅通过去除check标记。再次check上以重新使它有效。
这个窗口同样提供了快速调试的功能:
条件 断点什么时候发生
发生次数 观察多长时间发生一次并基于该次数中断
标签 断点在分支中允许有效和无效
何时发生 在输出窗口显示一条消息以代替真实的中断
7.断开或输出调用者信息(.NET 4.5/Windows 8 Store)
没有为调用程序当前方法准备的全局变量,并且得到当前栈内容是一个非常慢的操作。
一个快速简单的手段是,为方法增加一个额外的可选字符型参数了,用属性。例如,
void&MyFunction(string&someValue,&[CallerMemberName]&string&caller&=&null)&{
因为这是可选的值,你不必修改任何调用程序,但现在你能:
①基于调用程序变量,在某些程序中设置断点条件
②向日志文件或者输出窗口输出调用程序内容
你也可以使用 和。同样记住构造函数,终结器和运算符重载将会显示它们的相关方法名(.ctor,op_Equals等等)。
8.监视方法返回值(VS2013, .NET 4.5/Windows 8.1 Store)
有时你想看看方法返回值但对你来说并不容易,因为它是另一个方法的输入参数,所以你并没有存储该值。
这个功能被加到VS2013中,但是它却非常容易错过,你不得不在正确的时间和正确的地方使用它。正确的地方是 Autos窗口,正确的时间是刚好回到方法被调用的地方这一步。当在你调用方法之前或者在方法体中时你看不到这个。它是一个单一步骤,像这样:
箭头标明它是返回值,并且让你知道和它相关的方法名。
我也不得不强调,一旦软件离开了你的机器,记录日志对问题解决是多么有效。但这是一个比这个更大的议题。
我是不是遗漏了一些更好的调试建议?在下面的回复中随时让我知道吧。
附:Michael Parshin也有一些。
原文链接: &&&翻译:
译文链接:> vs2013写入位置时发生访问冲突问题
vs2013写入位置时发生访问冲突问题
发布时间: & &
浏览:242 & &
回复:0 & &
悬赏:0.0希赛币
输入a##时程序正常运行,当输入ab##或更多元素时程序会中断在p-&data=这一行。。
本问题标题:
本问题地址:
温馨提示:本问答中心的任何言论仅代表发言者个人的观点,与希赛网立场无关。请对您的言论负责,遵守中华人民共和国有关法律、法规。如果您的言论违反希赛网问答中心的规则,将会被删除。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-为什么在VS2013中,这段代码不能理想运行,就是输出的时候出问题_百度知道
为什么在VS2013中,这段代码不能理想运行,就是输出的时候出问题
#include &stdio.h&#include &stdlib.h&int main(){ char *p; p = (char *)malloc(sizeof(char)* 20); scanf_s(&%s&, p); printf(&%s\n&, p);}
#include&&StdAfx.h&&//把这个头文件加上#include&&stdio.h&#include&&stdlib.h&int&main(){ char&*p; p&=&(char*)malloc(sizeof(char)*&20); //scanf_s(&%s&,&p);&& gets(p);&//用gets代替scanf_s printf(&%s\n&,&p);}
gets肯定能用的,但scanf也不应该有问题吧。我在第一行加了#pragma warning(disable:4996) ,然后用了标准的scanf,代码就行了,是微软的scanf_s的问题么?
函数的问题吧。
其他类似问题
为您推荐:
其他1条回答
不能直接输出%s吧用puts(p)试一试
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 vs2013 详细输出信息 的文章

 

随机推荐