3
在Matlab中,當我想通過調試器運行一個函數時,我可以輸入dbstop func
,它在func.m
的第一個代碼行中輸入一個斷點。然後,當我撥打func(...)
時,我可以逐步完成功能。如何以編程方式在方法開始處放置斷點?
是否有任何方法的等價物?如果我要調試到的obj.meth()
一個交互式通話,沒有這些替代品的工作:
dbstep in
只能如果代碼被跨進是功能的一部分,我調試,不若我打電話它交互式地dbstop obj.mymeth
,dbstop MyClass/mymeth
或dbstop MyClass.mymeth
失敗Cannot find function MyClass.mymeth
。- 所以,也許它被視爲一個子功能。但是,
dbstop in MyClass at mymeth
因Cannot find function "mymeth" within "MyClass"
而失敗。這其中最令我意外。請注意,即使它能起作用,我仍然需要首先找出定義的類。 dbstop mymeth
實際上確實設置了一個斷點,但它將它設置在MyClass
的第1行,而不是在MyClass.mymeth
的開頭。如果mymeth
過載,我還沒有測試過會發生什麼情況。- 接下來,我嘗試通過metaclass和metamethod:
ms = ?MyClass; meth = ms.MethodList(strcmp({ms.MethodList.Name}, 'mymeth'))
,給我一個meta.method
對象給我的方法。但是,dbstop
想要一個字符串,所以我不能放置一個斷點。儘管meta.method告訴我定義類,但它並不告訴我方法定義的行號,所以我也不能像這樣設置斷點。
然後,所有剩下的是從meta.method
確定定義類,打開圖形交互式編輯器中相應的文件,搜索定義方法就行了,用手把一個斷點。這是非常耗時的,只有在工作時才能正常工作。
有沒有什麼辦法可以進入交互調用的方法,或者在程序的開頭以編程方式設置斷點?我正在使用2013a。
第二和第三個要點得非常接近。我通過修改後的答案對其進行了小修改。希望也適合你。 – chappjc