2015-02-05 81 views
0

當Mex函數產生分段錯誤時,彈出MATLAB系統錯誤窗口並選擇Attempt to Continue會導致很多無用的調試信息被調入命令窗口。有沒有辦法在Matlab中捕捉MEX函數分割錯誤?

是否有可能在Matlab中捕獲這些mex-exceptions或至少能夠稍後處理它們?

不幸的是,以下傳統的try/catch將在此情況下工作:

try 
    myMex(input) 
catch 
    error('Mex failed') 
end 

請注意,我不想catch the error inside the mex

+0

我不會這樣做。系統錯誤有一個原因表明您退出MATLAB並不會嘗試繼續。有一個很好的機會,你已經損壞了內存。如果您絕對需要嘗試保存一些數據,請僅使用嘗試繼續。 – chappjc 2015-02-05 18:22:27

+0

是的,有很好的理由不這樣做。但我不打算在事後使用結果。我想調試我的C代碼並重新啓動matlab,並重新加載所有數據的每一個小小的變化是不實際的。 – JaBe 2015-02-05 18:28:35

+1

使用調試器進行調試。附加到MATLAB。 [Windows](http://stackoverflow.com/a/27391300/2778484)(我使用這種方法,但你也可以告訴'mex'產生調試信息)或[Linux](http://www.mathworks。 COM/matlabcentral /答案/ 91741-如何-DO-調試-C-MEX-文件,下UNIX)? – chappjc 2015-02-05 18:46:34

回答

1

如果您有源代碼,可以使用調試模式(-g標誌)編譯mex。
然後,根據您的平臺,您可以在調試模式下運行mex(檢出Troubleshoot MEX-Files on MATLAB docs)。
如果您在Windows中運行,則可以使用Visual Studio並選擇debug-> Attach to Process並選擇MATLAB。然後你可以運行你的mex文件,這會在VS中而不是在MATLAB中觸發一個異常(和一個斷點)。

+0

是的,然後我可以在Matlab中斷VS中斷並做很多很好的調試工作。但是如果我在VS中結束調試,Matlab中的分段錯誤仍然會引發。 – JaBe 2015-02-17 15:32:00

相關問題