2016-02-26 7 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)); 

В этом случае, при нажатии на рисунке (не ось, или каких-либо меток, но серой части рисунка) файл м будет открыт в редакторе на заданную строку.

Если вы хотите, чтобы программно определить номер строки, выполните следующие действия

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

это будет. но есть ли способ, которым Matlab может автоматически знать «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