在R中运行rcpp创建的函数时,如何知道代码中的哪一行会导致错误?

时间:2019-01-16 13:17:17

标签: rcpp

我想这可能是调试时的一个普遍问题。我使用Rcpp创建了函数。编译器未发现任何错误,因此可以使用该功能。但是,当以大约1/100的概率运行该函数时,R会停下来自行关闭,没有任何细节。我正在做模拟,因此每次输入的数据可能都不同。所以我想可能是有些特殊情况会导致错误。我的问题是,我们是否有办法知道哪条线会导致此类错误?

到目前为止,我正在使用的方法是注释掉某些组件,以查看哪个部分会产生此类错误。只要我可以复制错误,就可以了。但这一次不起作用(我无法复制该错误,可能是因为它太具体了。)任何评论或建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

R因分段错误而崩溃,即您尝试访问无法访问的内存。当您尝试访问仅包含n+1元素的向量的n元素或使用指针不当时,通常会发生这种情况。为了发现明显的段错误(但不仅限于此),我始终使用Valgrind。编写最少的R代码以生成段错误。然后从这样的终端运行它。

R -d "valgrind --tool=memcheck --leak-check=full" --vanilla -f test.R

要在GNU / Linux sudo apt-get install valgrind上安装valgrind。 Windows上不存在Valgrind。