MATLAB "эхо на" внутри функции. Является ли это возможным? - PullRequest
5 голосов
/ 04 ноября 2011

Я прочитал в документации , что я могу использовать оператор echo on;, чтобы MATLAB распечатал операторы, которые он выполняет.Однако у меня возникают трудности с выполнением этой работы внутри функции.

Например:

function do_something(foo)

a   = 2;
echo on;
foo = foo+1;
disp('This is a test');
foo = foo+3;

end

Если я вызову do_something(foo) из командного окна, я ожидал увидеть что-то вроде:

foo = foo+1;
disp('This is a test');
This is a test
foo = foo+3;

Однако в приведенном выше примере все отпечатки MATLAB:

this is a test

, что не соответствует ожиданиям.

Обновление

Как объясняет @Phonon ниже, echo on только для скриптов (извините, я пропустил это!).Тем не менее, я прочитал в документации, что я могу активировать echo для данной функции следующим образом:

echo fcnname on

Так что мой вопрос сейчас заключается в том, есть ли способ активировать эхо для функции с использованием некоторого измененияСинтаксис выше, чтобы я сделал это (вызов echo) внутри функции ?(переменная, которая содержит имя функции в этом случае, будет предоставлена ​​mfilename)

Обновление 2:

Насколько я понимаю, это не возможно активировать echo для определенной функции внутри фактической функции.Помимо прочего, кажется, что MATLAB необходимо заранее знать, должна ли функция работать в «режиме эха», чтобы избежать использования JIT .

Ответы [ 3 ]

6 голосов
/ 04 ноября 2011

Согласно документации Matlab, т.е. help echo,

ECHO ON включает отображение команд внутри Script-файлов .

Он не будет работать внутри функций. Чтобы заставить его работать для функций, согласно тому же файлу справки,

ECHO ON ALL включает отображение команд внутри любых файлов функций, находящихся в данный момент в памяти (то есть функций, возвращаемых INMEM).

ECHO OFF ALL выключает их все.

Обновление

Чтобы выяснить, в какой функции вы находитесь в данный момент, лучший способ сделать это - вызвать dbstack. Идет примерно так:

[S,I] = dbstack;
funcName = S.name;
1 голос
/ 04 ноября 2011
echo fcnname on

совпадает с

echo('fcnname','on');

Используя синтаксис вызова функции, вы можете вместо этого передать переменную:

echo(found_found, 'on');
0 голосов
/ 04 ноября 2011

Я не думаю, что эхо работает внутри функции.Вы всегда можете включить эхо вне функции, используя следующий метод:

foo = 1;
echo do_something on;
do_something(foo);
echo do_something off;

Единственная причина не использовать это, если вы хотите, чтобы отображалась только часть вашей функции, а не все строки,Если вы настаиваете на том, чтобы увидеть строку и результат определенной части вашей функции, грубый способ сделать это для ограниченного числа строк будет:

s = {'foo = 1;'
     'foo = foo+1;'
     'disp(''This is a test'');'
     'foo = foo+3;'
     'foo'
    };
for i = 1:numel(s)
   disp(s{i}); eval(s{i});
end

Будет отображаться:

foo = 1;
foo = foo+1;
disp('This is a test');
This is a test
foo = foo+3;
foo

foo =

     5    

Я также должен добавить, что, вероятно, я бы не использовал такой метод для отладки.Есть лучшие способы выяснить, что происходит внутри функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...