R 4.0.0 + RStudio 中的“调试位置是近似的,因为源不可用”

Man*_*l R 6 debugging r rstudio rtools r-4.0.0

我已经更新到 R4.0.0和 RStudio 版本1.2.5042

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

  1. 通过单击“安装并重新启动”按钮(包括--with-keep.sourceR CMD INSTALL 选项)从 RStudio 中构建包。
  2. .R我要调试的函数的文件中设置断点。
  3. 调用该函数并等待调试器准确地停止在我设置断点的位置。

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

调试位置是近似的,因为源不可用

这是 annyoing,因为我仍然可以调试,但我不在实际功能中了。

任何提示/想法为什么会这样?

编辑 (11.05.2020)

这似乎是 RStudio 和 R 4.0.0 的问题。这就是我这么认为的原因。我使用了另一台运行 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"
    
    Run Code Online (Sandbox Code Playgroud)
  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)
    
    Run Code Online (Sandbox Code Playgroud)

    调试器应启动,带你有权线321你应该能够改变的代码,你应该得到“调试位置是-近似值,因为最源是-不速效”警告如果你是在低于 4.0.0 的 R 版本上。

  7. 转到R/00_csem.R并删除第 321 行中的断点
  8. 关闭 Rstudio 并将 R 更新到 4.0.0(使用 eg 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 行,但是,这次您确实收到了“debug-location-is-approximate-because-the-source-is-not-availabe”警告。

这是为什么?欢迎任何想法/提示/建议!!

我尝试过的其他事情:

  • 从win-library中删除包并重新安装
  • 使用从 GitHub 重新安装包 devtools::install_github()
  • 检查包根
  • 更新了所有依赖包
  • 在不同的机器上重复这个过程
  • 我开发了另一个包,您可以在此处从 GitHub 克隆:https : //github.com/ME-Rademaker/cSEM.DGP。你可以用这个包运行相同的程序,但是,在这里我在使用 4.0.0 时没有收到警告......我认为这非常奇怪。

Jon*_*han 6

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

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

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

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