VS 调试 matlab mex “当前无法命中断点,还没有为该文档加载任何符号” 无法命中断点

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)

即可重新命中断点!

如有帮助请留言,谢谢

上一篇:Matlab2016a安装libsvm


下一篇:Codeforces 1294D MEX maximizing(思维)