我喜歡在matlab中使用命令進行調試。一些問題:在matlab中調試
- 如果選擇一個堆棧,是否有可能直接跳到特定堆棧而不是使用dbup和dbdown一個接一個地移動堆棧?
- 跳轉到中間堆棧後,如果我執行一些命令,爲什麼它會自動返回到最內層堆棧?我可以留在中間堆棧,直到我發出命令離開另一個堆棧?
我喜歡在matlab中使用命令進行調試。一些問題:在matlab中調試
1)不是從鍵盤上。如果您使用編輯器並顯示編輯器工具欄,則會顯示一個「堆棧」下拉菜單,向您顯示整個調用堆棧,您可以跳轉到任意級別。通過查看下拉菜單中的內容,您可能能夠一起破解n級dbup/dbdown,但由於調試器與用於腳本編寫的M代碼的交互,調試器控制很難從Matlab進行腳本編寫。 2)如果你從「K >>」調試器提示符發出一個命令,當它完成時它應該返回你從你發出的堆棧級別,就像你期望的一樣。你是否還有設置在代碼底部的斷點?也許你實際上在嵌套的調用堆棧中從斷點看到了輔助調試器「K >>」提示符。你基本上可以擁有多個嵌套的調試器上下文。
例如:
function f1
f2();
function f2()
f3();
function f3()
f4();
function f4()
disp('Hello world');
如果你在這樣的調試器扔掉它,你會在這本身就是從原來的調試器會話發起調用堆棧底部命中斷點。
>> dbstop in f1 at 8
>> f1()
8 disp('Hello world');
K>> dbup
In workspace belonging to f1>f3 at 6
K>> dbup
In workspace belonging to f1>f2 at 4
K>> f1()
8 disp('Hello world');
K>> dbstack
> In f1>f4 at 8
In f1>f3 at 6
In f1>f2 at 4
In f1 at 2
In f1>f4 at 8
In f1>f3 at 6
In f1>f2 at 4
In f1 at 2
K>>
做一個dbquit(走出嵌套調試會話),讓你回到你離開了原來的調用堆棧的中間。
K>> dbquit
K>> dbstack
In f1>f4 at 8
In f1>f3 at 6
> In f1>f2 at 4
In f1 at 2
K>>
如果dbcont出你的「K >>」,然後控制流程會從調用堆棧,其中斷點最初提出的底部恢復,不管什麼堆棧幀K個>>期待在。您不能使用調試器來更改正在執行的主線代碼的控制流。
我曾嘗試在我的泛型異常處理程序中顯示彈出窗口,它將顯示錯誤消息和代碼行,並在調用dbup後獲得一個按鈕,該按鈕的回調跳轉到相關代碼行(使用opentoline函數)脫離錯誤處理程序並返回到用戶代碼中)。不幸的是,我發現Matlab自動忽略了回調中的dbup調用。嘆... – 2010-01-27 22:56:10
有趣。我會說每個人都不一樣,而且我也習慣從命令行進行調試。不過,我最近很少這麼做,更喜歡使用編輯器。我希望能夠順利地將鼠標放在變量上以查看內容。這是快速和方便的。而且由於在代碼中只需要鼠標點擊就可以了,我花的時間更少。我的長期目標是創建更多的錯誤,因此完全不需要調試器。仍在繼續努力。 – 2010-01-27 14:09:54