"Debug location is approximate because the source is not available" 在 R 4.0.0 + RStudio 中

"Debug location is approximate because the source is not available" in R 4.0.0 + RStudio

我已经更新到 R 4.0.0 和 RStudio 版本 1.2.5042

我正在开发一个包,我经常使用以下工作流程:

  1. 通过单击 "Install & Restart" 按钮(包括 --with-keep.source R CMD INSTALL 选项)从 RStudio 中构建包。
  2. 在我要调试的函数的.R文件中设置断点。
  3. 调用该函数并等待调试器准确停止在我设置断点的位置。

这曾经工作得很好。但是,现在我总是得到:

Debug location is approximate because the source is not available

这很烦人,因为我仍然可以调试,但我已经不在实际功能中了。

任何hints/ideas这是为什么?

编辑 (11.05.2020)

这似乎是 RStudio 和 R 4.0.0 的问题。这就是我这么认为的原因。我使用了另一台机器 运行ning Windows 10 并执行了以下步骤(按此顺序;对于 Windows 用户应该是可重现的)。一开始我安装了 R 3.6.1 和 RStudio 1.2.5042(在撰写本文时,1.2.5042 是当前版本;还尝试了 RStudio 的预览版 1.3.957)。

  1. 克隆我正在开发的包 Github:

    git clone "https://github.com/M-E-Rademaker/cSEM"
    
  2. 转到包根目录并打开 cSEM.Rproj

  3. 运行 devtools::install_github("M-E-Rademaker/cSEM")自动安装包并下载cSEM依赖的所有包。
  4. 在 RStudio 中:点击“Build”安装和“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-approximate-because-the-source-is-not-availabe" 警告 IF 你使用的 R 版本低于 4.0.0.

  7. 转到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-approximate-because-the-source-is-not-availabe" 警告。

这是为什么?欢迎任何ideas/hints/suggestions!!

我尝试的其他事情:

我使用你的包对此进行了调查,发现你在这里看到的是 RStudio / R 界面中相当深的错误,由 R 在 R 4.0 中围绕源引用所做的一些细微更改引起。

只要函数代码中有反斜杠 (\),就会出现问题。当发生这种情况时,R 会转义它,这会导致 RStudio 认为您正在查看的函数的副本与文件中的不同,这反过来会导致它在代码浏览器中向您显示一个副本,而不是打开文件本身。

由于您的 csem() 函数包含反斜杠,因此会触发该问题。我已将其写在我们的问题跟踪器上:

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