一、安装 MinGW
想在 matlab 下利用 VS 调试 C++ 代码,首先需要安装 MinGW(纯粹胡扯,不安装也可以,后面有讲原因)。只需要登录合法的账号然后下载安装即可。
调试过程请看这篇博客。
二、调试过程出现的错误。
解决方案:link
解决后:
- 这下总算大功告成了吧!迅速附加到进程。然后开始调试:
原来还要配置 VS 与 matlab 混编的环境。
在阅读了许多资料之后,我发现我的第一步可能就是多余的。因为我本来就已经安装了 VS2022 ,相当于已经有了一个调试器,其实没有必要再去安装 MinGW 这个调试器。而我之前在命令窗口键入
mex -setup
之所以会报错,是因为我的 Matlab 版本比 VS 版本要低,因此我的 matlab 没有检测到 VS。详情及解决方案请参考这篇帖子。将两个文件添加到文件夹之后,我的问题基本就已经全部解决了,没有进行很多大佬所分享的注册列表新建工程之类的工作,具体原因与区别我也没有分析。
这时我再进行调试的时候发现,帧不在模块中的问题依然没有解决。解决方案请看这篇博客。
至此再进行调试没有报过错了。
再放几个写的比较全面的帖子,不知道以后能不能用到:
link1
link2
link3
link4
link5
三、一些错误
还是没有办法调试。cpp文件中没有办法设置断点,一直显示“当前不会命中断点。还没有为该文档加载任何符号。”
看了很多帖子,才发现根本没有生成 .pdb 文件。然后继续查资料,感觉还是需要用 mex -g 那个命令。于是只好将下面的错误一一改好。
warning C4838: 从“int”转换到“const mwSize”需要收缩转换
warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
error C2440: “=”: 无法从“const mwSize *”转换为“const int *”
本来还有一个错误:
note: 指向的类型不相关; 转换需要 reinterpret_cast、C 样式强制转换或带圆括号的函数样式强制转换
但我改完前面的之后,这个错误就自动消失了。然后 , pdb 文件就生成了(哭泣)。
然后继续附加到进程,然而还是没有办法进入断点。断点依然是空心的。
四、matlab mex文件无效: 找不到指定的模块
三个半月过去了,这个问题还是没有解决。在跑另外一个代码的时候,又遇到了新的问题。
按照原来的思路:
选择合适的编译器和编译语言后,依然不行。
五、解决方案
又过了三个月,终于弄好了。
链接。