說我有一些功能foo
用於獨立的應用程序,(即編譯成一個可執行文件與mcc -m
,),其中有一個重要的中間結果bar
。正常情況下,函數完成後我不需要這個中間結果,因此它不是返回值。但是,對於開發和調試目的,能夠使這個中間結果可訪問是有用的,我可以通過使用assignin
將中間結果放入某個調試工作空間來實現。在獨立的matlab中的調試代碼
現在問題是assignin
在獨立編譯中不可行,並且mcc
會在代碼中存在assignin
時發生錯誤。我只想在交互式運行代碼時包含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中是否有任何這樣的代碼構造可以完成這個任務,還是有更好的選擇?到目前爲止,我剛剛在開發過程中一直在討論註釋代碼,取消註釋和推薦調試代碼。
不幸的是,似乎這個函數在我的古老版本的matlab(6.1.0.450)中還沒有提供,但是`mcc`對任何這樣的ifblock都很聰明並且完全忽略它,或者它會嘗試編譯`assignin `代碼,因此編譯失敗。 – wich 2011-02-16 14:53:29