如何在 RStudio 中为包函数设置断点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 RStudio 中为包函数设置断点?相关的知识,希望对你有一定的参考价值。

要复制这个错误,你必须先安装MARSS包。我还包括用户指南。

https:/cran.r-project.orgwebpackagesMARSSvignettesUserGuide.pdf)。

第35页的例子可以使用

dat = t(harborSealWA)
dat = dat[2:nrow(dat),]
debugonce(MARSSkem)
kemfit = MARSS(dat)

当RStudio中的MARSSkem的调试模式被触发时,您会发现无法设置断点! 在屏幕上方还有一条调试信息,内容是:"调试位置是近似的,因为没有源代码"。"Debug位置是近似的,因为没有源代码"。我想这就是我不能设置断点的原因吧!

问题是,我试图定位的错误(在所示的简单例子中并不存在)是在第55次迭代时发现的,而且每次迭代都包括几个for循环,每个循环有100个循环!如果用手去踩,根本就无法实现。用手去踩是不现实的!

Q1.) 在R studio中是否有办法为这个函数设置断点?

Q2.) 如果没有,我最好的选择是什么来定位这个问题?(理想情况下,我不想在包的源码上做手脚,但如果是唯一的选择,我也会这样做)

谢谢你

巴兹

答案

最简单的方法(我认为)是制作你自己的函数副本,将其作为源码,然后使用断点。

要做到这一点,你应该看到弹出的源代码。

View(MARSS)

你应该能看到弹出的源码 现在把它复制粘贴到一个新的脚本中,并加上 mymarss <- 在最开始的时候,把它保存起来(可能是mymarss.R),然后把它作为源代码。

source(mymarss.R)

现在你可以像正常的调试它了。

dat = t(harborSealWA)
dat = dat[2:nrow(dat),]
debugonce(mymarss)
kemfit = mymarss(dat)

你可以自由地添加删除断点等等等等。

另一答案

使用RStudio进行调试

断点可以在包代码中设置,就像在独立的R代码中一样。主要的差異是,您需要有一個最新的套件建置,才能設定斷點。如果您的套件建构不是最新的,当您尝试设置断点时,RStudio 会警告您。

為了在套件中有效地進行除錯,您還需要確保您的套件是以 --with-keep.source 選項編譯的。這個選項是 RStudio 中新套件的預設值;如果您需要手動設定,可以在 Tools -> Project Options -> Build Tools 中找到。

當在套件內的檔案中設定斷點時,RStudio 會在卸載套件時自動停用斷點,並在載入套件時啟用斷點。如果您在套件中设置断点时遇到问题,请确保该套件是按照上述的源代码信息进行编译的,并且其构建是最新的。

我不相信这在R会话中也能用。如果你想调试调用包函数的代码,你需要打开包含函数的包文件。同届 作为你的调用代码,然后在包函数中设置你的断点。

以上是关于如何在 RStudio 中为包函数设置断点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在达到给定次数的点之后使GDB断点断开?

rstudio如何加载函数?

如何使用 Rcpp 在 Rstudio 中关闭 CLANG 诊断?

主题:Rstudio打开一片空白是啥原因

如何在 Solidity 中为函数设置默认参数

RStudio中为R创建Notebook文件