繁体   English   中英

如何调试导致 R 崩溃的 R package?

[英]How to debug R package that crashes R?

我写了一个 R package,但是在运行某些操作时,它会崩溃 R。 这些软件包包括 Rcpp 例程,这是我怀疑发生这种情况的地方。 奇怪的是,运行相同的操作并不会始终导致崩溃。 有时会,有时不会。 有人对如何调试此类问题有建议吗? 我在 Windows 10 上,使用 R v4.0.5 运行 R 工作室。

提前致谢。

手册编写 R Extensions推荐了两个工具: ValgrindAddressSanitizer

  1. 使用最近的 Linux 版本(推荐 Fedora),例如在虚拟机中
  2. 安装必要的工具
  3. 使用 valgrind 工具编译 R-devel
  4. 编译package
  5. 在启用 valgrind 的情况下检查可疑功能或整个 package

官方手册(见上文)包含多个链接,您可以通过您喜欢的搜索引擎找到更多链接。 这里有一个例子: https://medium.com/@danielvfryer/valgrind-memcheck-with-ra-quick-and-dirty-guide-d64567394c57

此外,SO 还包含一些优秀的指南。 只需搜索Valgrind ,您就会发现例如: 如何使用 valgrind 查找 memory 泄漏?

Bioconductor团队有一个(现在是经典的)视频,描述了编译后的 R package 代码的完整调试 session - 我强烈推荐它。

顺便说一句,我不同意之前的答案及其“Fedora 推荐”。 任何带有这些工具的 Linux 分发版都可以,它们在 Docker 中也能很好地工作(我们也有Rocker )。 我在 R 工作了大约 25 年,从未使用过 Fedora。 R 手册通常也很清楚不推荐任何一种发行版,并且 R 核心测试了几个。 编写 R 扩展手册中第 4.3.2 节“使用 valgrind”中的确切措辞是

如果您可以在常见的 CPU 类型或支持的 macOS 或 Solaris 版本上访问 Linux,您可以使用“valgrind”( https://www.valgrind.org/ ,发音为“tinned”)来检查可能的问题。 )

我同意“任何系统”的建议。 Windows 也可以运行gdb

要使用valgrind ,检测是有帮助的,但不是必需的。 So the simplest case (to me) is still docker run --rm -ti r-base bash to open a bash shell in a Docker container with R (under Debian) where one could then install valgrind. 这仍然需要了解 Linux 和 Docker,因此不是给定的。

所以回到基本问题: gdb以及print语句可以 go 缩小问题范围。 与往常一样,第一步是可靠地重现问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM