VS 调试 matlab mex “当前无法命中断点,还没有为该文档加载任何符号” 无法命中断点 解决方法
VS 可以调试matlab mex文件,但有时候莫名其妙出现 “当前无法命中断点,还没有为该文档加载任何符号 ” 而且无法命中断点。博主花了四个小时终于摸清其中大坑。
目前网上改VS设置的方法都无效!
实验环境
Visual Studio 2017
matlab 2018b
WIN 10
出现问题的小伙伴先按官方操作走一遍
https://ww2.mathworks.cn/help/matlab/matlab_external/debugging-on-microsoft-windows-platforms.html?action=changeCountry&s_tid=gn_loc_drop
搬运过来:
- 确保 Visual Studio 是您选择的 C 编译器:
cc = mex.getCompilerConfigurations('C','Selected');
cc.Name
ans =
Microsoft Visual C++ 2012 ©(这里2015,2017无所谓)
- 拷贝官方样例,使用 -g 选项编译源 MEX 文件,此选项会产生.mexw64 和 .mexw64.pdb 文件
copyfile(fullfile(matlabroot,'extern','examples','mex','yprime.c'),'.','f')
mex -g yprime.c
-
启动 Visual Studio。不要退出您的 MATLAB® 会话。
-
从 Visual Studio 的工具菜单中,选择附加到进程。
-
在“附加到进程”对话框中,选择 MATLAB 进程并点击附加(什么都不用改!!)
Visual Studio 将加载数据,然后显示一个空的代码窗格。 -
通过选择文件 > 打开 > 文件,打开源文件 yprime.c。在matlab工作目录中找到 yprime.c。(不用新建VS解决方案)
-
在 mexFunction 入口处设置一个断点。
这时候断点是空心并显示 “当前无法命中断点,还没有为该文档加载任何符号” 是正常的! -
自己在命令行运行(不用写在在matlab脚本里面加断点)
yprime(1,1:4)
- 最后建议关闭 调试>窗口>异常设置>下面win32 exception复选框
如果断点能命中请往下看
在没有关闭VS调试时,玩多少次命令都能命中。但是一旦退出VS调试,重启(重新附加到进程)多少次都不能命中断点了!
但是matlab重新mex -g yprime.c 又可以命中。。。
但总不能每次都只能爽一次吧orz…
我开始以为是VS改变了pdb什么文件,或者没有重新加载,最后发现应该是VS终止调试时断开了于matlab的通信,但matlab不知道,保持着单方面通信,此时只需要clear all,再重新调用(VS附加到进程开着)
yprime(1,1:4)
即可重新命中断点!
如有帮助请留言,谢谢