假设我有一些foo
在独立应用程序中使用的函数(即用mcc -m
, 编译成可执行文件),它具有重要的中间结果bar
。通常在函数完成后我不需要这个中间结果,因此它不是返回值。然而,对于开发和调试目的,能够使这个中间结果可访问是很有用的,我可以通过assignin
将中间结果放在某个调试工作区中来做到这一点。
现在的问题是,assignin
在独立编译中是不可能的,mcc
如果代码中有一个错误,就会报错assignin
。我想做的是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 中是否有任何这样的代码结构可以做到这一点,还是有更好的选择?到目前为止,在开发过程中,我一直在处理注释代码、取消注释和重新注释调试代码。