Для меня, поскольку у M нет встроенного отладчика, о котором можно говорить, я трачу 50% своего времени только на отладку, которую можно было бы сохранить, если бы был отладчик.50% моего кода для разработки составляют операторы Print, так как без них я потеряюсь, обнаружив, откуда исходит ошибка.(это также плохо, так как слишком большое количество печатных сообщений в коде иногда затрудняет просмотр алгоритма, он мешает, но не может его удалить, так как он может понадобиться мне позже).
Мне кажется удивительным, что такой мощный и гибкий вычислительный инструмент, как M, все еще имеет относительно менее продвинутую среду разработки.Когда я использую Matlab, у меня уходит несколько секунд, чтобы определить причину ошибки с помощью отладчика.
Кто-то может сказать, что для отладки используйте Workbench.Я попытался использовать для отладки демо Manipulate, и я не могу понять это.Слишком сложный в использовании.M нуждается в простой простой в использовании встроенной программе отладчика (в самой записной книжке, а не в отдельной программе) и с номерами строк!
Хорошо, учитывая приведенное выше введение :), это то, что я делаю сам вответ на ваш вопрос:
имеют разный уровень отладочных сообщений.грубый уровень и уровень детализации.Грубый уровень печатает только сообщение, когда оно входит в функцию и когда она существует.
У меня есть кнопка в пользовательском интерфейсе для включения / выключения отладки (если вы делаетеПрограмма, основанная на пользовательском интерфейсе, иначе она будет в коде).
Используйте отдельную функцию отладки, где отладочное сообщение проходит до того, как будет напечатано.Там вы можете добавить отметку времени к каждому сообщению и тому подобное перед печатью (также можете контролировать, нужно ли отправлять сообщения в текстовый файл из одного места).Остальная часть вашего кода, просто вызывает эту функцию отладки с сообщением для печати.Теперь я печатаю все в консоль, а не в текущую записную книжку.
Каждое отладочное сообщение имеет имя функции, которое вызывало его при запуске.
Если вы хотите контролировать отладку на уровне модуля, то, что я делаю, это просто делает локальный флаг отладки внутри модуля и включает / выключает его каждый раз, когда я хочу отладить этот конкретный модуль.Этот локальный флаг отладки принимает настройку глобального флага отладки.Таким образом, я могу отлаживать только один модуль, если я хочу, а не остальную часть кода.
Есть много других способов настроить все это.Но я обнаружил, что если я потрачу больше времени на создание хорошей системы отладочных сообщений, это поможет выделить ошибки при необходимости.
Вот несколько полезных ссылок
http://reference.wolfram.com/mathematica/guide/TuningAndDebugging.html
Отладчик рабочей среды (если вы можете понять, как использовать для отладки Manipulate и Dynamics, пожалуйста, дайте мне знать)
http://www.wolfram.com/products/workbench/features/debug.html