[英]debugging with try and catch statements in MATLAB
我在MATLAB文件中有一條try / catch語句,該語句調用了一堆嵌套函數。 簡而言之,try / catch在“最高”級別上運行,迭代一個我調用其功能的文件列表。
for i=1:length(FILELIST)
try
dosomething(FILELIST(i)
catch
disp(exception.message)
rethrow(exception)
end
我的問題是,說dosomething()有很多子功能dosomethingchild()我該如何訪問它的調試工作區? 我將必須刪除所有父級中的try / catch語句,以便在“錯誤/警告”設置為“滿”的情況下使用“ STop”訪問調試工作空間。
try / catch使調試變得更加困難,但我想保留它,因為有時由於文件的性質,代碼會在某些文件上失敗,而不是代碼本身。
提前致謝。
只需刪除try..catch
。 由於您僅顯示並重新提交錯誤,而沒有實際捕獲到任何特定的錯誤,因此,對於由文件的性質引起的錯誤,要使其健壯可靠,則生產代碼不可行。 它的行為與沒有try..catch
的情況相同,因此在發生錯誤后它將停止執行。
stop if error
啟用了stop if error
功能,它將停止在錯誤處理程序中,這已經是沒有用的了。 從那里不可能返回到被調用函數的工作空間,因為這些工作空間已經關閉(調用已經返回)。
在實際情況中,如果還dbstop if caught error
了try..catch
dbstop if caught error
,也可以嘗試dbstop if caught error
,但是在這種情況下,我建議您擺脫try..catch
或至少使其捕獲特定的錯誤。 您可能還想立即發現(特定)錯誤。 離實際發生的距離越遠,通常對特定錯誤的理解就越少。
為什么不將keyboard
添加到catch語句中,並檢查代碼失敗時發生的情況。
Generall我同意Egon的觀點,即try / catch塊根本沒有幫助。 但是,對於您的調試情況,這可能不是最壞的主意。 我對調試此代碼的建議:
dbstop if error
, dbstop if error
執行dbstop if error
以切換到調試模式。 或者,在與disp(execption.message)
的行上放置一個斷點。 doSomething()
函數中放置一個斷點,最好將其盡可能地靠近該錯誤(該錯誤為您提供了調用棧,因此您應該變得非常接近),然后從控制台再次手動執行doSomething()
。 它會在您的斷點處停止,然后您可以單步執行(快捷方式:F10)或進入子功能(單步執行F11)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.