首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有什么有效的方法来调试RCPP编译后的R代码(在OSXMaverick上)?

有什么有效的方法来调试RCPP编译后的R代码(在OSXMaverick上)?

提问于 2018-02-05 04:17:18
回答 1关注 0查看 398

步骤:

(1)转到目录~/。r(带有...的隐藏目录)。创建一个名为“Makevars”的新文件,并在其中添加行CXXFLAGS=-g -O0 -Wall...

2)在终端中,键入R -d lldb启动R.lldb。

3)输入run在lldb命令行。这将开始R。

4)编译RCPP代码,查找编译对象的位置。Dirk对上面提到的帖子的回应说明了一种方法。这里有一个例子。在R中运行以下命令:

代码语言:javascript
复制
library(inline)

fun <- cxxfunction(signature(), plugin="Rcpp", verbose=TRUE, body='
int theAnswer = 1;
int theAnswer2 = 2;
int theAnswer3 = 3;
double theAnswer4 = 4.5;
return wrap(theAnswer4);
')

这将创建一个已编译的共享对象和其他文件,可以通过在R中运行setwd(temdir()和list.files())找到这些文件。CPP文件,如“file5156292c0b48.cpp”和。所以文件像“file5156292c0b48.so”

5)通过运行dyn.load("file5156292c0b48.so")在R命令行

6)现在我们要调试C++代码。所以反对。打回11分贝ctrl + c现在,我想在文件5156292c0b48.cpp中的一个特定行设置一个断点。我通过打开另一个终端并查看文件5156292c0b48.cpp中感兴趣的行号来找到正确的行号。假设它是第31行,它对应于在我的示例中上面的intheAnswer=1行。然后在lldb命令行输入:breakpoint set -f file5156292c0b48.cpp -l 31调试器会打印出一个断点已经设置以及其他一些东西...

7)运行Rcont在lldb中(直到我点击Enter才会自动显示R提示符)并调用函数。运行fun()在R命令行。现在我正在调试共享对象(点击n转到下一行,p[对象名称])来打印变量等。

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档