【发布时间】:2011-06-28 09:37:52
【问题描述】:
假设我有一些函数foo 在独立应用程序中使用(即编译成带有mcc -m 的可执行文件),它有一个重要的中间结果bar。通常在函数完成后我不需要这个中间结果,因此它不是返回值。然而,出于开发和调试目的,能够使这个中间结果可访问是很有用的,我可以通过使用assignin 将中间结果放在某个调试工作区中来做到这一点。
现在的问题是assignin 在独立编译中是不可能的,如果代码中有assignin,mcc 会报错。我想做的是仅在代码以交互方式运行而不是在编译为独立应用程序时才包含assignin。此外,这会加快速度,因为我在独立应用程序中无论如何都不需要中间结果,因此可以通过不在独立应用程序中执行分配来同时处理时间和/或内存。在任何其他编程环境中,都可以将其称为调试和发布模式下的编译。
在伪matlab中:
function res = foo()
bar = some complicated formula
if ~standalone
assignin('debug', 'foo_bar', bar)
end
res = some complicated formula involving bar
问题是我不知道如何表达if ~standalone,首先我不知道如何测试是否处于独立模式,但更关键的是,这需要一些代码结构实际上导致mcc 完全忽略受保护的代码块,不尝试编译它,因为在独立模式下无法编译 assignin。
顺便说一句,这不仅对中间结果有价值,而且对于额外的数据收集也很有价值,额外的数据将在受保护的块中计算并通过assignin 导出。显然,这些额外的数据不应该在独立版本中计算,因为它没有任何用途。
matlab 中是否有任何这样的代码结构可以做到这一点,或者有更好的选择吗?到目前为止,在开发过程中,我一直在处理注释代码、取消注释和重新注释调试代码。
【问题讨论】:
标签: debugging matlab matlab-compiler