墨西哥人调试。重新定义。
各位,今天我要介绍一位新的客座博主Martijn Aben。Martijn是我们荷兰办金宝app公室的一名支持工程师,他幻想着MATLAB与外部世界的连接。作为其中的一部分,他讲述了一个伟大的故事,关于他如何与微软称赞的VS Code IDE集成。把它拿走,马丁!
作为MathWorks技术支持工程师,我专门从事M金宝appATLAB“外部接口”领域的工作,我经常与MATLAB用户一起工作困难用他们自定义编写的墨西哥文件。有时mex文件不能产生预期的结果,有时它们会完全崩溃MATLAB。这是因为墨西哥文件是本地库,可以操纵MATLAB内部的本机内存,即使是最小的内存损坏也很容易导致整个应用程序崩溃。虽然我们不能为您调试您的mexfile源代码,但这不是我们提供的支持的一部分,我们可以帮助您使用策略来自己调试您的代码。金宝app我们可以提供一些关于需要注意的问题的提示和技巧,我们可以回答关于mxArray-和MEX api的问题,我们可以帮助您选择和设置调试环境,这就是我想在这篇文章中讨论的内容。
在Windows上选择调试环境一直非常简单。我们支金宝app持Microsoft Visual c++编译器来创建墨西哥文件,如果您使用该编译器,那么Microsoft Visual Studio显然是调试器的首选。事实上,开始使用这个调试器是实际产品的一部分文档.
然而,在MATLAB R2015b中,我们开始支持MinGW64编译器,它利用金宝app
Visual Studio代码
当我第一次尝试Visual Studio Code时,它仍然是预览版本。它看起来像一个漂亮而光滑的代码编辑器,但是当添加扩展时,我并没有立即意识到它有多么强大。我最近在做一个小爱好物联网项目时重新发现了这个工具和它的可扩展性,这向我展示了VS Code真的变得多么强大。作为MathWorks的员工和MATLAB的忠实粉丝,我决定看看是否也可以用它来调试mex文件。
现在,在我们开始实际的设置和调试之前,首先你需要了解一些关于VS Code的事情。特别是,成熟的Visual Studio的用户可能想知道如何创建一个解决方案并将项目添加到其中,因为这些在VS Code中不存在,至少在这些名称下不存在。来创建类似于项目你本质上开放一个文件夹然后把东西组织在一起文件夹.想要在已经打开的项目旁边打开其他项目?添加另一个文件夹到你的工作空间.想要创建一个类似于解决方案与多个项目?打开多个文件夹在你的工作空间,然后保存这工作空间.打开一个解决方案就变成了打开一个工作空间。
另一件需要注意的重要事情是,开箱即用的VS Code是一个功能强大的代码编辑器,适用于许多语言,但实际上只适用于运行在Node.js中的Javascript和Typescript。对于其他语言和运行时,您将需要安装相关的扩展。由于MATLAB的mex文件是用C/ c++编写的,这意味着我们将需要一个扩展,这个扩展被恰当地命名为“C/ c++”。让我们开始实际安装这个扩展。打开VS Code,进入VS Code中的扩展部分:
查找C/ c++扩展:
用那个绿色的小东西来安装
在VS Code中的墨西哥文件调试
现在我们已经安装了一个可以调试C/ c++代码的VS Code,让我们看看如何配置它来完成调试MEX-files的特定任务。我们去了
我们首先注意到的是
{"configurations": [{"name": "Win32", "includePath": ["c:/ProgramData/MATLAB/Supp金宝apportPackages/R2018a/3 .instrset/mingw_w64.]我nstrset/x86_64-w64-mingw32/include", "c:/MATLAB/R2018a/extern/include", "${workspaceRoot}" ], "defines": [ "_DEBUG", "UNICODE", "_UNICODE" ], "intelliSenseMode": "msvc-x64", "browse": { "path": [ "c:/ProgramData/MATLAB/SupportPackages/R2018a/3P.instrset/mingw_w64.instrset/x86_64-w64-mingw32/include", "c:/MATLAB/R2018a/extern/include", "${workspaceRoot}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } } ], "version": 3 }
其中,我们告诉VS Code在哪里可以找到MinGW64的头以及在哪里可以找到MATLAB的头。我在这里使用的MATLAB R2018a安装在
有了vscode,现在让我们添加一个调试配置。我们去
这将创建一个新的
然后vscode自动添加一个新节到
{"name": "(gdb) Attach", "type": "cppdbg", "request": " Attach", "program": "enter program name, for example ${workspaceRoot}/a.exe", "processId": "${command:pickProcess}", "MIMode": "gdb", "miDebuggerPath": "/path/to/gdb"}
我们需要更新
{"name": "(gdb) Attach", "type": "cppdbg", "request": " Attach", "program": "c:/MATLAB/R2018a/bin/win64/MATLAB.exe", "processId": "${command:pickProcess}", "MIMode": "gdb", "setupCommands": [{"text": "handle SIGSEGV nostop"}, {"text": "handle SIGSEGV noprint"}], "miDebuggerPath": "c:/ProgramData/MATLAB/Suppor金宝apptPackages/R2018a/3 .instrset/mingw_w64.instrset/bin/gdb.exe"}
从那里我通常删除
实际调试
如果你仔细观察上面的截图,你会发现我已经编译过了
墨西哥人- gmymex.c
在哪里
所以我们现在需要做的就是在代码中放置一个断点:
切换到调试视图
确保MATLAB正在运行(我们将VS Code配置为附加调试器到一个已经运行的MATLAB),然后我们按下播放按钮:
它显示了一个与运行进程的对话框,然后我们选择MATLAB:
VS Code现在应该附加到MATLAB,我们应该看到一些行
[新线程18404.0 .0x473c][新线程18404.0 .0x3294]
在
Mymex ([1 2 PI 21])
当我们这样做的时候,我们会看到VS Code会在我们的断点上停止,步进(F10)几行,然后我们可以看到:
1.我们能够成功地获得一个指向本机输入数据的指针,并且第一个元素的值为1
2.输入的大小实际上是一个1x4的向量。
我们也可以通过我们的
1.如何
2.方法中数组中的某些元素
要了解您还可以做什么,请阅读VS Code的调试文档.
结论
我意识到我们今天并没有在任何超级高级的实际mex -file中调试和修复任何错误,但我确实向您展示了如何使用我最近最喜欢的免费开发工具之一开始调试mex -file,我希望这能激励您在需要调试MinGW64 mex -file时尝试一下这个工作流。愉快地寻找那些虫子!
哦,对于Linux用户来说,上面的故事是关于MinGW64和Windows的,因为VS Code也适用于Linux,你也可以在Linux上应用这个工作流来调试你的GCC mex -文件。显然有些路径会有些不同,但我相信你能找到;如果你对此有任何问题,请告诉我们。
脚注
在配置VS Code时,我们需要MinGW64 include目录的位置以及
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。