2013-08-23 67 views
0

我有一個使用s_function的Simulink模型,它是一個mexw32文件。 s_function塊也使用.lib模塊。現在,當我試圖在模擬結束之前運行模型Matlab崩潰並且在命令窗口中沒有任何錯誤時。如果Matlab崩潰,我有什麼選擇來進行調試?如何調試Matlab/Simulink?

+0

當你說MATLAB「崩潰」時,你是什麼意思?你說它不會在MATLAB命令行中返回一個紅色的錯誤 - 它是否會給出其他形式的錯誤,比如SEGV崩潰轉儲,然後退出? MATLAB本身是否消失? –

+0

@SamRoberts Matlab凍結,出現一個窗口:MATLAB已停止工作,在線檢查解決方案,關閉程序。如果我點擊查看詳細信息,問題事件名稱= APPCRASH。其餘的我無法理解。 –

+0

你在使用什麼操作系統? –

回答

1

這是導致seg-fault的寫入不良的S函數的典型行爲。使用下面列出的步驟調試它:http://www.mathworks.com/support/solutions/en/data/1-3KK6RK/

+0

從我發現到目前爲止,它看起來像有一個DLL丟失。我應該在哪裏把斷點放在S函數中(我試過但我每次都錯過了壞行)? –

+0

在每個mdl *函數中添加一個斷點。 – Navan

1

我不知道Simulink或S函數(從來沒有使用它們),但通常當一個MEX文件段錯誤時,MATLAB將從它大部分時間恢復,顯示一個堆棧跟蹤並將您置於「需要重新啓動MATLAB」命令提示符模式下。您會在系統%TMP%文件夾中找到崩潰轉儲和錯誤日誌文件。如其他人所說,如果您有權訪問MEX函數的源代碼,請使用調試符號重新編譯它,將調試器附加到MATLAB,將斷點放入調試器,並通過調用它來啓動MEX函數來自MATLAB。一旦進入C代碼,請逐步調試代碼,直到找到問題。

以下是有關doc page更詳細描述此過程。


您提到您的MEX可執行文件與外部庫鏈接。所以你可能也想檢查問題的根源。