我们如何debugging我们在C ++应用程序中使用的matlab生成的DLL?

我们已经使用mcc编译成DLL的matlab .m文件。 这由我们在Visual Studio中debugging的C ++ GUI应用程序使用。 当我们接触到我们的matlab函数时,我们所能做的就是跨越它。 我们如何在源代码级debugging.m代码?

我觉得添加一些“打印”语句很容易,在matlab中它们实际上被称为“disp”,并且在VS的输出窗口中查看东西。 但我们什么都看不到 甚至没有从C ++源代码中的printf(),或直接从命令行而不是VS中运行我们的应用程序。 从Google和SO,我们知道没有任何发送到stdout曾经出现在任何地方。 (这个问题是相关的: Visual Studio 2012 C ++标准输出,但没有为我们工作。)

我在.m脚本中试过msgbox('blah blah'),并重build了DLL。 没有出现。 我不知道这是否应该工作,但我们的matlab代码没有执行,或者如果msgbox不希望在这种情况下工作,如标准输出。

我们会很高兴与基于打印的debugging。 断点和其他技术会很好,但在这个时候不是必须的。

我们在Win7,Visual Studio 2015上使用Matlab R2016b。我们有用于制作DLL的.m源文件,我们有使用DLL的GUI应用程序的源代码。

几个项目:

  1. 当你调用你的dll的初始化例程时,调用生成的“WithHandlers”版本: YourDllInitWithHandlers( **, **) 。 '**'是接受matlab disp / warn / error消息的函数的占位符,您可以根据需要路由到stdout,OutputDebugString或日志。

  2. 你有可能使用-nojvm选项从你的代码初始化mcr吗? 如果是这样,消息框将不会显示。

  3. 你不能进入编译库的.m源代码。 我们使用的两个选项是:(a)将输入保存为已编译的m代码作为mat文件,然后在Matlab中随意加载和调试。 (b)在调用编译的dll和调用Matlab-Engine之间进行切换。 这个API集允许您启动,控制并调用一个完全交互式的matlab桌面。 你可以像在常规的matlab会话中那样设置断点和步骤。 这需要更多的设置代码,但调试非常方便。