墨西哥人调试。重新定义。
伙计,今天我想介绍一位新的博客·马丁雅·阿根。Martijn是一名支持工万博1manbetx程师,我们的荷兰办事处是关于Matlab与外部世界的联系的白日梦。作为他作为一个伟大故事的一部分,可以讲述如何与微软的鼓掌的VS代码IDE集成。把它带走martijn!
作为MathWorks技术支持工程师专门从事Mat万博1manbetxlab“外部接口”区域,我经常与Matlab用户一起工作困难使用他们的自定义写入MEX文件。有时MEX文件不会产生预期的结果,有时它们会完全崩溃MATLAB。这可能发生,因为mex-files是本机库,它可以操纵matlab内的本地内存,甚至最小的内存损坏很容易导致整个应用程序崩溃。虽然我们无法为您调试MEX-File源代码,但这不是我们提供的支持的一部分,我们可以帮助您自己调试代码的策略。万博1manbetxWe can provide some hints and tips on what kind of issues to look out for, we can answer questions on the mxArray- and MEX APIs, and we can help you choose and setup your debug environment, which is what I’d like to talk about in this post.
从历史上看,在Windows上选择调试环境非常简单。我们支万博1manbetx持Microsoft Visual c++编译器来创建mex文件,如果您使用该编译器,那么Microsoft Visual Studio是调试器的最佳选择。事实上,开始使用这个调试器是实际产品的一部分文件.
但是,在Matlab R2015B中,我们开始支持MingW64编译器,它利用了万博1manbetx
Visual Studio代码
当我第一次尝试Visual Studio代码时,它仍然是预览构建。它看起来像一个很好和光滑的代码编辑器,但我没有立即识别添加扩展时可能有多强大。我最近重新发现了该工具及其可扩展性,在做一点爱好者的IOT项目时,它显示了我的VS代码真正变成了强大的功能。作为MathWorks员工和整体Matlab粉丝,我决定看到我是否可以使用它来调试MEX文件。
现在,在我们开始实际的设置和调试之前,首先你需要知道一些关于VS Code的事情。特别是,成熟的Visual Studio的用户可能想知道如何创建一个解决方案并将项目添加到其中,因为这些在VS Code中不存在,至少在这些名称下不存在。来创建类似于a的东西项目你本质上开放一种文件夹然后将事物组织在一起文件夹.想要在已经打开的项目旁边再打开其他项目?添加另一个文件夹对你的工作空间.想要创造一些类似于解决方案与多个项目?打开多个文件夹在你的工作空间, 然后保存这工作空间.打开一个解决方案就变成了打开一个工作区。
另一件重要的是要注意的是,开箱即用的VS代码是许多语言的强大代码编辑器,但实际上只有用于在Node.js中运行的JavaScript和CypeScript的调试器。对于其他语言和运行时,您需要安装相关的扩展名。由于MATLAB MEX文件以C / C ++编写,因此我们需要一个扩展名,并且该扩展名为“C / C ++”。因此,让我们开始努力安装此扩展名。触发VS代码并将其返回到vs代码中的Extensions部分:
找到C/ c++扩展:
并使用那个小绿色安装它
MEX文件调试在VS代码中
现在我们有了一个可以调试C/ c++代码的VS Code安装,让我们看看如何配置它来完成调试mex文件的特定任务。我们去
我们首先注意到的是
{“configurations”:[{“名称”:“Win32”,“IncludePath”:[C:/pramgataData/matlab/supportpac万博1manbetxkages/r2018a/3p.instret/mingw_w64.instret/x86_64-w64- mimentw32/include“,”c:/ matlab / r2018a / extern / internall“,”$ {workspaceroot}“],”定义“:[”_debug“,”Unicode“,”_unicode“,”IntellIsenseMode“:”MSVC-X64“,”浏览“:{”path“:[”C:/prographyata/matlab/sup万博1manbetxportpackages/r2018a/3p.instret/mingw_w64.instret/x86_64-w64- mimentw32/include“,c:/ matlab / r2018a / extern / compress”,“$ {workspaceroot}”],“limitsymbolstoincludedheaders”:true,“databasefilename”:“”}}“,”版本“:3}
在其中,我们告诉VS代码在哪里找到MingW64标题以及在哪里找到MATLAB标题。我在这里使用的Matlab R2018A,安装在
现在VS Code都很好了,让我们添加一个调试配置。我们去
这将创造一个新的
VS代码然后自动添加新部分
{“名称”:“(gdb)附加”,“类型”:“cppdbg”,“请求”:“附加”,“程序”:“输入程序名称,例如$ {workspaceroot} /a.exe”,“,”processId“:”$ {命令:pickprocess}“,”mimode“:”gdb“,”midebuggerpath“:”/ path / to / gdb“}
我们需要更新
{“名称”:“(gdb)附加”,“类型”:“cppdbg”,“请求”:“附加”,“程序”:“c:/matlab/r2018a/bin/win64/matlab.exe”,“processId“:”$ {命令:pickprocess}“,”mimode“:”gdb“,”setupmommands“:[{”text“:”hander sigsegv n ostop“},{”text“:”hander sigsegv noprint“}”,“midebuggerpath”:“c:/programdata/matlab/s万博1manbetxupportpackages/r2018a/3p.instret/mingw_w64.instret/bin/gdb.exe”}
从那里,我通常删除
实际调试
如果您在上面的屏幕截图中支付了封闭的注意,您可以看到我已经编制了
墨西哥人- gmymex.c.
在那里
所以我们现在需要做的就是在代码中放置一个断点:
切换到调试视图
确保matlab实际上正在运行(我们将VS代码配置为附加毕竟已经运行的matlab调试器,然后我们然后点击播放按钮:
它显示了一个具有运行进程的对话框,我们然后选择matlab:
vs代码现在应该附加到matlab,我们应该看到一些类似的线
[新线程18404.0x473c] [新线程18404.0x3294]
在里面
mymex([1 2 pi 21])
当我们这样做时,我们将看到VS代码将停止在我们的断点上,踩踏(F10)我们可以看到几行:
1.我们能够成功获取指向本机输入数据的指针,第一个元素有值1
2.输入的大小确实是一个1x4的向量。
我们也可以逐步
1.如何
2.在我们的阵列中检查某些元素
想知道你还能做什么,请阅读VS Code的调试文档.
结论
我意识到我们没有实际调试和修复任何错误在任何超级先进的现实世界的今天mex files,但是我向您展示如何开始调试mex files使用我recent-favorite免费开发工具和我希望这激发了你尝试这个工作流如果你需要调试你的MinGW64 mex files。祝你找到那些虫子愉快!
哦,对于你的Linux用户出来,虽然上面的故事是关于Mingw64和Windows,因为VS代码也适用于Linux,但您也可以在Linux上应用此工作流程来调试您的GCC MEX文件。显然,一些路径会有所不同,但我相信你能弄清楚;如果您对此有任何其他问题,请告诉我们。
脚注
配置VS代码时,我们需要MingW64的位置包括目录以及位置
评论
要留下评论,请点击这里登录到您的MathWorks帐户或创建一个新帐户。