R номера строки сценария в ошибке?

любое использование 'с'

с (document.forms["mainForm"].elements) {
input1.value = "спам";
input2.value = "спам";}

96
задан forkandwait 18 September 2009 в 17:47
поделиться

2 ответа

Это не даст вам номер строки, но сообщит вам, где происходит сбой в стеке вызовов, что очень полезно:

traceback()

[Edit:] При запуске сценария из командной строки вам придется пропустить один или два вызова, см. traceback () для интерактивных и неинтерактивных сеансов R

I Мне неизвестен другой способ сделать это без обычных подозреваемых в отладке:

  1. debug ()
  2. browser ()
  3. options (error = recovery) [с последующими параметрами (error = NULL) для восстановления]

Вы можете посмотреть это сообщение по теме.

[Edit:] Извините ... только что увидел, что вы запускаете это из командной строки. В этом случае я бы посоветовал поработать с функциональностью опций (ошибок). Вот простой пример:

options(error = quote({dump.frames(to.file=TRUE); q()}))

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

В противном случае, если есть определенные области, которые вас беспокоят (например, подключение к базе данных), а затем заключить их в функцию tryCatch ().

41
ответ дан 24 November 2019 в 05:41
поделиться

Поддержка этого будет реализована в R 2.10 и более поздних версиях. Дункан Мердок только что написал в r-devel 10 сентября 2009 г. о findLineNum и setBreapoint :

Я только что добавил в R-devel пару функций, чтобы помочь с отладка. findLineNum () находит, в какой строке какой функции соответствует определенной строке исходного кода; setBreakpoint () принимает вывод findLineNum и вызывает trace () для установки точки останова

Они полагаются на наличие отладочной информации ссылки на источник в коде. Это значение по умолчанию для кода, читаемого source () , но не для пакетов. Чтобы получить ссылки на источники в коде пакета, установите среду переменная R_KEEP_PKG_SOURCE = yes , или в R установить options (keep.source.pkgs = TRUE) , затем установите пакет из исходного кода. код. Прочтите ? FindLineNum , чтобы узнать, как указать ему для поиска. внутри пакетов, а не ограничивать поиск глобальными окружение.

Например,

 x <- "f <- function (a, b) {
 if (a> b) {
 а
 } else {
 б
 }
 } "


eval (parse (text = x)) # Обычно вы используете source () для чтения файла ...

findLineNum (" # 3") #  - фиктивное имя файла, используемое
синтаксический анализ (текст =)

Будет напечатан

  шаг 2,3,2 в 

и вы можете использовать

 setBreakpoint (" # 3")

, чтобы установить там точку останова.

В коде все еще есть некоторые ограничения (и, возможно, ошибки); Больной исправлять ошибки

10
ответ дан 24 November 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: