Мне нравится идея "dbstop if display", однако это не та опция dbstop, о которой я знаю.
Если все остальное терпит неудачу, есть надежда. Млинт - хорошая идея, но если в ней много тысяч строк и много функций, то вы никогда не найдете преступника. Хуже того, если этот код был написан небрежно, появятся миллионы флагов mlint. Как вы его сузите?
Решение - показать свой путь туда. Я бы перегружал функцию дисплея. Только временно, но это будет работать. Если вывод выводится в командную строку как
ans =
stuff
или как
foo =
stuff
Тогда это было записано с дисплеем. Если это выходит просто
stuff
тогда виновник дисп. Почему это имеет значение? Перегрузить обидчика. Создайте новый каталог в некотором каталоге, который находится в верхней части пути поиска MATLAB, с именем @double (при условии, что выходные данные являются двойной переменной. Если это символ, то вам понадобится каталог @char.) НЕ ставьте символ @ Удвойте сам каталог в пути поиска MATLAB, просто поместите его в какой-то каталог, который находится на вашем пути.
Внутри этого каталога поместите новый m-файл с именем disp.m или display.m, в зависимости от того, что вы решили, что произвело вывод из командной строки. Содержимое m-файла будет вызовом встроенной функции, которая позволит вам затем вызывать встроенную версию disp или отображать на входе.
Теперь установите точку отладки внутри новой функции. Каждый раз, когда вывод генерируется на экран, эта функция будет вызываться. Если существует несколько событий, вам может понадобиться использовать отладчик, чтобы разрешить обработку, пока нарушитель не окажется в ловушке. В конце концов, этот процесс захватит наступательную линию. Помните, вы в отладчике! Используйте отладчик, чтобы определить, какая функция называется disp и где. Вы можете выйти из дисплеев, отобразить или просто просмотреть содержимое dbstack, чтобы увидеть, что произошло.
Когда все будет сделано и проблема устранена, удалите этот дополнительный каталог и добавленную в него функцию disp / display.