2016-02-26 96 views
0

我有一個很長的腳本調用了很多其他腳本,吐出了很多數字。matlab GOTO(有點)

爲了調試的目的,我認爲它會很有用,如果當點擊一張圖片時編輯器會轉到特定的行。有誰知道這是否可能?

我想我可以實現類似

A=[]; 
figure 
plot(x) 

A=ginput(1) 

if A~=[] 
    goto(pointer,line) 
end 

的問題是,它不僅會唯一正確後,這個數字是由工作。在分析結束時,我不得不看看最終的錯誤數字。

換句話說:有沒有辦法通過點擊一個數字去特定的代碼行?

N.B.有關GOTO的實現,請參閱(GOTO FileExchange

+0

爲什麼不乾脆把在評論中標籤,然後在編輯器中做一個簡單的查找(即ctrl + f)? – Dan

+0

尋找幻想? xd 當然好評。 – shamalaia

+2

看看[回調](http://se.mathworks.com/help/matlab/creating_plots/callbacks-programmed-response-to-user-action.html):「一個回調是一個函數,在響應中執行到某些預定義的用戶操作,例如點擊圖形對象或關閉數字窗口。「 – mikkola

回答

3

嘗試使用opentoline函數與回調一起使用。喜歡的東西

plot(1:10); % A simple plot 
set(gcf,'ButtonDownFcn',@(h,e)opentoline('YourFunctionName.m',LineNumber)); 

在這種情況下,當你點擊圖中(不是軸,或任何標籤,但圖的灰色部分),M檔將在編輯器中指定的行打開。

如果你想以編程方式確定然後執行以下操作

plot(1:10) 
st = dbstack; 
set(gcf,'ButtonDownFcn',@(h,e)opentoline(st(1).file,st(1).line-1)); 
+0

這會去做。但有沒有一種方法可以自動識別'linenumber'?例如如果代碼被修改並且亞麻布改變了。 – shamalaia

+1

我已經添加了如何獲取文件的當前行號。 –

1

您可以使用此undocumented function行號:

f = figure; 
uicontrol ('string', 'open "str2double.m" @ 200', 'callback', @(a,b)opentoline(which('str2double.m'),200), 'position', [100 100 400 50]) 

它爲我在r2015a

+0

它不在我的r2014a。但是謝謝。 – shamalaia