«Расположение отладки является приблизительным, потому что источник недоступен» в R 4.0.0 + RStudio - PullRequest
3 голосов
/ 04 мая 2020

Я обновился до R 4.0.0 и версии RStudio 1.2.5042.

Я разрабатываю пакет и регулярно использую следующий рабочий процесс:

  1. Создайте пакет из RStudio, нажав кнопку «Установить и перезагрузить» (включая опцию --with-keep.source R CMD INSTALL).
  2. Установите точку останова в файле .R функции, которую я хочу отладить.
  3. Вызовите функцию и подождите, пока отладчик остановится именно там, где я установил точку останова.

Раньше это работало хорошо. Однако теперь я всегда получаю:

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

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

Любые подсказки / идеи, почему это так?

Редактировать (11.05.2020)

Похоже, это проблема с RStudio и R 4.0 +0,0. Вот почему я так думаю. Я использовал другую машину с Windows 10 и выполнил следующие действия (в таком порядке; должен воспроизводиться для Windows пользователей). Вначале у меня были R 3.6.1 и RStudio 1.2.5042 (на момент написания 1.2.5042 была текущая версия; пробовал также с предварительной версией 1.3.957 RStudio).

  1. Клонируйте пакет, который я разрабатываю из Github:

    git clone "https://github.com/M-E-Rademaker/cSEM"
    
  2. Go в пакет root и откройте cSEM.Rproj

  3. Запустите devtools::install_github("M-E-Rademaker/cSEM"), чтобы автоматически установить пакет и загрузить все пакеты, от которых cSEM зависит.
  4. В RStudio: нажмите "Build" install и "Install and Restart"
  5. Теперь перейдите к исходному файлу. Например: R/00_csem.R и установите точку останова, например, в строке 321.
  6. Теперь запустите следующий фрагмент кода:

    model <- "
    # Structural model
    eta2 ~ eta1
    eta3 ~ eta1 + eta2
    
    # Measurement
    eta1 =~ y11 + y12 + y13
    eta2 =~ y21 + y22 + y23
    eta3 =~ y31 + y32 + y33
    "
    
    res <- csem(threecommonfactors, model)
    

    Отладчик должен запуститься и получить право строка 321. Вы должны быть в состоянии изменить код, и вы должны NOT получить "debug-location-is-приблизительный-потому что-источник-не-доступный" предупреждение ЕСЛИ вы используете версию R ниже 4.0.0.

  7. Go до R/00_csem.R и удалите точку останова в строке 321
  8. Закройте Rstudio и обновите R до 4.0.0 (используя, например, installr::updateR())
  9. ВАЖНО: также получите самую последнюю версию Rtools и следуйте инструкциям на веб-сайте, касающимся части, где вам нужно добавить rtools в PATH. https://cran.r-project.org/bin/windows/Rtools/
  10. Поскольку вам необходимо переустановить все пакеты: снова откройте cSEM.Rproj; запустите install.packages("devtools")
  11. Теперь повторите шаги 3, 4, 5 и 6.
  12. Отладчик должен снова остановиться на строке 321, однако на этот раз вы do получите предупреждение "debug-location-is-приближенный, потому что источник-не-доступен" .

Почему это так? Любые идеи / советы / предложения приветствуются !!

Другие вещи, которые я пробовал:

  • Удаление пакета из win-библиотеки и переустановка
  • Переустановка пакета из GitHub использование devtools::install_github()
  • Проверенный пакет root
  • Обновлены все пакеты зависимостей
  • Повторная процедура на разных машинах
  • Я разрабатываю другой пакет, который вы можете клон из GitHub здесь: https://github.com/M-E-Rademaker/cSEM.DGP. Вы можете запустить ту же процедуру с этим пакетом, однако здесь я не получаю предупреждение при использовании 4.0.0 ... что, на мой взгляд, крайне странно.

1 Ответ

2 голосов
/ 12 мая 2020

Я исследовал это с помощью вашего пакета и обнаружил, что то, что вы видите здесь, является довольно глубокой ошибкой в ​​интерфейсе RStudio / R, вызванной некоторыми тонкими изменениями R, внесенными в R 4.0 в отношении ссылок на источники.

Проблема возникает, когда в коде функции есть обратная косая черта sh (\). Когда это происходит, R избегает его, что заставляет RStudio думать, что копия функции, которую вы просматриваете, отличается от копии в файле, что, в свою очередь, заставляет ее показывать вам копию в браузере кода вместо открытие самого файла.

Поскольку ваша функция csem() содержит обратную косую черту sh, она вызывает проблему. Я написал это на нашем трекере:

https://github.com/rstudio/rstudio/issues/6854

...