【问题标题】:Debugging Matlab C S-function with Visual Studio 2010使用 Visual Studio 2010 调试 Matlab C S-Function
【发布时间】:2012-03-17 18:34:21
【问题描述】:

我在调试一个用C编写的Matlab S-Function时遇到问题。源代码是analysis.c,通过混合这个文件后

mex -g -v analysis.c

我获得了“analysis.mexw32”和“analysis.mexw32.pdb”。

在 Visual Studio 2010 中,我打开“analysis.c”,将其附加到进程“Matlab”并设置断点。到目前为止,这个断点不被接受:

“未命中断点。未加载符号。”

当我在 Matlab 中运行该文件时,所有内容都会在没有遇到断点的情况下执行。 有人可以给我一些建议吗?

我以前做过,而且很简单。

【问题讨论】:

  • 这可能看起来很傻,但是你能在analysis.c 的同一目录中构建经典的yprime.c 示例并尝试成功打断点吗?
  • 我可以在同一个文件夹中构建它,但没有命中断点。生成 pdb 文件。
  • 即使在 3 年后也是如此。 ***多么痛苦。这些符号未在 Visual Studio 2010 中加载,并且已经浪费了 3 个小时尝试不同的东西。

标签: visual-studio-2010 debugging matlab


【解决方案1】:

看起来您或多或少地遵循了MATLAB help 中的说明。请您仔细检查一下您是否完全遵循了他们?例如,您是否打开过完全相同的 C 文件?

我的第一个建议是确保您已将 mex 编译器配置为与使用 mex -setup 的 Visual Studio 安装相同。

【讨论】:

  • 是的,我遵循了 Matlab 的帮助。 C文件是一样的。运行 mex -setup 显示只有 2 个编译器可用: [1] C:\PROGRA~1\MATLAB\R2011a\sys\lcc 中的 Lcc-win32 C 2.4.1 [2] C:\ 中的 Microsoft Visual C++ 2010 Programme\Microsoft Visual Studio 10.0
  • 我也明白了:--> cl /c /Zp8 /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD /FoC:\DOKUME~1\BENDER ~1.WIN\LOKALE~1\TEMP\MEX_CS~1\analysis.obj -IC:\PROGRA~1\MATLAB\R2011A\extern\include -IC:\PROGRA~1\MATLAB\R2011A\simulink\include /Z7 -DMX_COMPAT_32 analysis.c
【解决方案2】:

通过更改“附加到进程”设置,问题已得到解决。我必须在对话框中选择“系统自己的代码”,然后加载符号。

【讨论】:

    【解决方案3】:

    使用本机代码,将进程附加到 Matlab 时,它可以工作,断点被命中。万岁,

    【讨论】:

      【解决方案4】:

      我的 yprime.c 设置如下所述: http://de.mathworks.com/help/matlab/matlab_external/debugging-on-microsoft-windows-platforms.html

      Tools-Options-Debugging-General - "Enable just my code" is unchecked.
      Tools-Options-Debugging-Native - Load DLL, Enable RPC Debugging.
      Tools-Options-Debugging-Symbols - 
      1. Uncheck Microsoft Symbol servers.
      2. Add the *location* of your pdb file by clicking on new folder.
      3. Cache symbols in this directoy in my case is empty.
      Attach process -> *Automatic : Native code* -> Matlab
      Debug -Windows- Modules should show your module (pdb file ) now.
      

      我注意到在一种情况下,尽管进行了上述编写过程,但仍未加载符号。但是 Debug-Windows-Modules 中存在一个名为 OnDemand... 的模块。 因此,即使 Visual Studio 没有显示您的模块或断点抱怨没有加载任何符号,也要设置断点。继续并从 Matlab yprime(1,1:4) 运行程序,然后将按需加载符号并激活断点。至少在我的情况下我可以。 呼!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 2016-02-21
        • 2011-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多