Обновлено 30.01.2009 Автор: Administrator
Отладка - одна из важнейших вещей в программировании, без которой, увы, обойтись крайне сложно. Если вы пишете сколько-нибудь сложные скрипты для R, то наверняка сталкивались с необходимостью отлаживать свой код или изучать чужой. Какие же возможности есть в R для отладки скриптов?
traceback() – показывает стек вызова
use tryCatch() to hold exceptions
debug() - debug a function. Next step by <ENTER>, see the values of variables by typing their names. Typing 'c' or 'cont'- continue to the end of the function (or loop if within a loop).’n’ – показывает код, который сейчас будет выполнен
undebug()
browser() - analog breakpoint. Вставляется в коде функции. Interrupt the execution of an expression and allow the inspection of the environment where browser() was called from. Но: лучше не вставлять вручную это, поттому что потом долго убирать и т.д. Вместо этого лучше указывать options(error=recover) – будем всегда переходит в режим отладчика при любой ошибке.
recover() – более мощная вещь чем browser т.к. позволяет работать со вложенными вызовами функций. Лучше всегда включать путем указания опции error, но можно и вручную.
cat() - analog of format() in C; ex: print(cat("iter=",iter,"\n"))
options(error=recover) – позволяет при ошибке смотреть post-mortem состояние, переходит в режим отладки. Эту опцию лучше всегда включать по умолчанию
или
options(error = dump.frames) - will save all the data in the calls that were active when an error occurred. Но error=recover лучше, т.к. можно всегда самому сохранить
debugger() – post-mortem debugging
>dump.frames(dumpto = "last.dump", to.file = FALSE)
>debugger(dump = last.dump)
trace() - allows you to insert debugging code (e.g., a call to browser or recover) at chosen places in any function. Аргумент edit – позволяет отредактировать код функции и вставить в нужных местах browser() и т.д. Edited version takes the place of the original либо до конца сессии, либо до untrace(). Похоже на fix() с именем функции. Полезная штука! Аргумент signature позволяет указывать класс объектов. Ex:
>trace(show, exit = browser, signature = "gpsPath")
будет трассировать show для объектов класса gpsPath
Другое использование – смотреть на те R-функции, которые вызывают внешний Fortran-код:
> trace(.Fortran, recover).
Теперь любая функция использующая Fortran будет отслежена (NB: используем recover вместо browser, т.е. нужно смотреть на разных уровнях вызова)
TODO
http://www.cims.nyu.edu/cgi-systems/info2html?(R-exts.info.gz)Debugging%2520R%2520code
посмотреть An Introduction to the Interactive Debugging Tools in R
< Предыдущая | Следующая > |
---|