gpt4 book ai didi

c++ - 我们如何调试在 C++ 应用程序中使用的 matlab 制作的 DLL?

转载 作者:可可西里 更新时间:2023-11-01 10:33:19 27 4
gpt4 key购买 nike

我们有使用 mcc 编译成 DLL 的 matlab .m 文件。这由我们在 Visual Studio 中调试的 C++ GUI 应用程序使用。当我们到达对我们的 matlab 函数的调用时,我们所能做的就是跳过它。我们如何在源代码级别调试 .m 代码?

我认为添加一些“打印”语句(在 matlab 中实际上称为“disp”)并在 VS 的输出窗口中观察内容滚动会很容易。但我们什么也没看到。甚至不是来自 C++ 源代码中的 printf(),也不是直接从命令行而不是在 VS 中运行我们的应用程序。从 Google 和 S.O.,我们了解到发送到 stdout 的任何东西都不会出现在任何地方。 (这个问题是相关的:Visual Studio 2012 C++ Standard Output 但对我们不起作用。)

我在 .m 脚本中尝试了 msgbox('blah blah'),并重建了 DLL。什么都没有发生。我不确定这是否可行,但我们的 matlab 代码没有执行,或者 msgbox 是否不应该在这种情况下工作,比如 stdout。

我们对基于打印的调试很满意。断点和其他技术会很好,但目前没有必要。

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

最佳答案

几项:

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

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

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

关于c++ - 我们如何调试在 C++ 应用程序中使用的 matlab 制作的 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41274251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com