Скажем, у меня есть какая-то функция foo
, которая используется в автономном приложении (т.е. скомпилирована в исполняемый файл с mcc -m
), который имеет важный промежуточный результат bar
. Обычно мне не нужен этот промежуточный результат после завершения функции, и поэтому он не является возвращаемым значением. Однако для целей разработки и отладки полезно иметь возможность сделать этот промежуточный результат доступным, что я могу сделать, используя assignin
, чтобы поместить промежуточный результат в некоторое рабочее пространство отладки.
Теперь проблема в том, что assignin
невозможна в автономной компиляции и mcc
будет выдавать ошибку с ошибкой, если в коде есть assignin
. Что я хотел бы сделать, так это включить assignin
только тогда, когда код запускается в интерактивном режиме, а не при компиляции как отдельное приложение. Кроме того, это ускорило бы работу, так как в любом случае мне не понадобился бы промежуточный результат в автономном приложении, и, следовательно, он мог бы использовать то же время и / или память, не выполняя назначение в автономном приложении. В любой другой среде программирования эту компиляцию можно вызывать в режиме отладки и выпуска.
В псевдоматлабе:
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
. Очевидно, что такие дополнительные данные не должны рассчитываться в автономной версии, поскольку они не будут служить какой-либо цели.
Есть ли в matlab такая конструкция кода, которая позволила бы это сделать, или есть лучшая альтернатива? До сих пор я просто жонглировал закомментированный код, раскомментировал и рекомендовал отладочный код, пока шел в процессе разработки.