Ответ 1
Для меня работает следующее.
У меня есть мой пакет TestDebug
с моей функцией
myfun <- function(a,b) {return(a+b)}
Если я запустил script
debug(TestDebug::myfun)
TestDebug::myfun(1,2)
Отладчик направляется прямо в источник TestDebug::myfun()
не в функцию ::
так же, как при размещении browser()
перед вызовом TestDebug::myfun(1,2)
.
Как вы упомянули в своем вопросе: в реальных ситуациях TestDebug::myfun(1,2)
часто вызывает otherpackage::myfun2(1,2)
. Если вы попытаетесь войти в otherpackage::myfun2(1,2)
, вы снова окажетесь внутри функции ::
.
Чтобы предотвратить это, я добавляю эти функции, называемые внутри других функций индексом debug
"на лету":
Как только вы находитесь на линии внутри TestDebug::myfun()
, где вызывается otherpackage::myfun2(1,2)
, я запускаю debug(otherpackage::myfun2(1,2))
в консоли. После этого я могу без проблем войти в otherpackage::myfun2(1,2)
и закончить в исходном коде otherpackage::myfun2(1,2)
. (..и не в исходном коде ::
)
Не забудьте позвонить undebug(otherpackage::myfun2(1,2))
после того, как вы уверены, что ваша проблема не находится внутри otherpackage::myfun2(1,2)
, чтобы предотвратить отладчик в otherpackage::myfun2(1,2)
при следующем вызове.
Если вы предпочитаете, вы можете также использовать debugonce(otherpackage::myfun(1,2))
(вместо debug(..)
) только для отладки функции один раз.