步骤:
(1)转到目录~/。r(带有...的隐藏目录)。创建一个名为“Makevars”的新文件,并在其中添加行CXXFLAGS=-g -O0 -Wall
...
2)在终端中,键入R -d lldb
启动R.lldb。
3)输入run
在lldb命令行。这将开始R。
4)编译RCPP代码,查找编译对象的位置。Dirk对上面提到的帖子的回应说明了一种方法。这里有一个例子。在R中运行以下命令:
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[对象名称])来打印变量等。
相似问题