2013-10-22 44 views
3

在Matlab中,當我想通過調試器運行一個函數時,我可以輸入dbstop func,它在func.m的第一個代碼行中輸入一個斷點。然後,當我撥打func(...)時,我可以逐步完成功能。如何以編程方式在方法開始處放置斷點?

是否有任何方法的等價物?如果我要調試到的obj.meth()一個交互式通話,沒有這些替代品的工作:

  • dbstep in只能如果代碼被跨進是功能的一部分,我調試,不若我打電話它交互式地
  • dbstop obj.mymeth,dbstop MyClass/mymethdbstop MyClass.mymeth失敗Cannot find function MyClass.mymeth
  • 所以,也許它被視爲一個子功能。但是,dbstop in MyClass at mymethCannot 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。

+0

第二和第三個要點得非常接近。我通過修改後的答案對其進行了小修改。希望也適合你。 – chappjc

回答

4

以下語法工作了我的電腦上進行簡單的測試:

dbstop in MyClass.m at MyClass.mymeth 
相關問題