ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-03-10 20:01:12  阅读:317  来源: 互联网

标签:yprime Visual 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)

即可重新命中断点!

如有帮助请留言,谢谢

标签:yprime,Visual,VS,matlab,中断点,mex
来源: https://blog.csdn.net/zb12138/article/details/104781129

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有