Nano Hash - криптовалюты, майнинг, программирование

Выход из вложенной инструкции try-catch

В настоящее время я отлаживаю код с вложенными операторами try-catch.

Я могу легко обрабатывать ошибки с помощью команды dbstop, но каждый раз, когда я смотрю на код и хочу остановить выполнение программы, мне приходится вводить dbquit один раз для каждого уровня вложенности.

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

Вот пример того, как я вызываю код:

dbstop if error
dbstop if caught error
mytestmain

А вот пример того, как может выглядеть функция (подфункция может быть, а может и не быть в другом .m файле)

function mytestmain 
try
    mytestsub
catch
end

%% Definition of subfunction
function mytestsub
try
    a=b;%generate an error as b is not defined
catch
end

Что я пробовал?

  • Я пытался использовать скрипт или функцию, которая вызывает dbquit дважды, однако это выполнит dbquit только один раз.
  • Я пробовал использовать dbquit('all'), но безрезультатно

Обратите внимание, что я предпочитаю не удалять операторы try-catch из кода.

05.06.2013

  • Такое поведение удивительно; dbquit должен полностью вывести вас из отладчика и выполнения кода, независимо от того, насколько глубоко вложены ваши попытки/перехваты. Я часто делаю это с глубоко вложенными try/catches. Какую версию Матлаба вы используете? 08.06.2013

Ответы:


1

Вы можете позвонить dbclear перед использованием dbquit

dbclear all; dbquit;

Обратите внимание, однако, что это также удалит все точки останова, которые вы установили вручную, поэтому, если вы используете точки останова в дополнение, вам следует использовать

dbclear if error; dbclear if caught error; dbquit;
05.06.2013
  • За исключением того, что это может быть более раздражающим, если вы также используете точки останова... к тому же, вам нужно постоянно вводить dbstop if caught error; dbstop if error заново... 05.06.2013
  • @RodyOldenhuis Да, вы правы; спасибо, что заметили это. Пожалуйста, смотрите мой обновленный ответ. 05.06.2013
  • На самом деле я бы обошёл это, создав один ярлык с dbclear if error; dbclear if caught error; dbquit;, а второй с dbstop if caught error;dbstop if error; Тогда это всего два клика. 05.06.2013
  • Я полагаю, что выберу двухэтапное решение, хотя я до сих пор не понимаю, почему невозможно объединить эти шаги в 1. 05.06.2013
  • Наверное, по той же причине, почему dbquit не работает в цикле while, что тоже для меня загадка. 05.06.2013
  • Давайте посмотрим, сможем ли мы это выяснить: stackoverflow.com/questions/16940495/ 05.06.2013

  • 2

    Это не так, как это должно работать. Один dbquit должен полностью вывести вас из отладчика независимо от того, насколько глубоко вложены ваши операторы try/catch и какие точки останова все еще установлены.

    У вас старая версия Matlab? Существует известная ошибка, связанная с dbstop if caught error в версиях Matlab до R2009b. вызвать такое поведение. Вы можете обновить, если вы используете более старую версию.

    Независимо от вашей версии попробуйте выполнить dbstop if all error вместо отдельных операторов dbstop if error и dbstop if caught error и посмотрите, изменится ли поведение.

    Я бы также предположил, что, возможно, вы запускаете несколько функций из командной строки «K>>» и заканчиваете вложенными сеансами отладчика, но dbquit('all'), который вы сделали, должен был позаботиться об этом случае.

    08.06.2013
  • Версия, которую я использую, довольно свежая, и я не думаю, что это проблема. Я предполагаю, что это действительно что-то вроде вложенных сеансов или что я сначала ловлю ошибку (пойманную dbstop if caught error), а затем фактически создаю ошибку, используя dbquit, которая затем запускает условие dbstop if error. Я попробую ваше решение, когда у меня будет возможность. 08.06.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..