上下文:我在Ubuntu 18.04上使用了R演播室,用C++代码创建了一个hello World R包 Rcpp 如中所述 Rcpp Package Development :
Writing R extensions 说明如何通过此shell命令在附加GDB进行调试的情况下启动R:
$ R -d gdb --vanilla
我想用QtCreator而不是gdb来调试GUI,但这不起作用(只打开一个十六进制转储窗口,我无法运行R):
$ R -d qtcreator --vanilla
如何使用QtCreator进行调试?
编辑1:
将QtCreator调试器附加到正在运行的R会话不起作用: 如果我启动R, get the process ID in R 通过 Sys.getpid() 然后选择 我得到一个错误:
Sys.getpid()
编辑2: 这个 ptrace 错误是由 kernel hardening 它只允许调试子进程。我可以(暂时)通过
ptrace
sudo su - echo 0 > /proc/sys/kernel/yama/ptrace_scope exit
仍然是一个开放的问题:QT创口调试器显示汇编代码(不是C/C++代码)
这里是我使用Emacs提供的gdb前端来实现这一点的步骤。例如,我正在调试一个使用Rcpp的包:
M-x R
M-x gdb
-p <pid>
continue
devtools::load_all()
next
这是一张屏幕截图 *R* 和 *gdb* 与源代码一起缓冲。不是红点指示的断点和指示处理位置的光标:
*R*
*gdb*
如果您以其他方式加载包,例如 library(..., lib.loc = "...") src 第一步中包的目录。这样Emacs就可以找到相应的源文件。我希望这也可以转移到QtCreator。
library(..., lib.loc = "...")
src