在 Visual Studio 中,我们可以使用“附加到进程”来调试 DLL。
有什么方法可以在 Eclipse/StatET 中调试 R 包的 C/C++ 代码(即类似于调试链接到 Scilab 的外部代码的示例)?
以下步骤适用于 Eclipse-CDT C/C++ (LUNA)。
$./configure --enable-R-shlib --with-valgrind-instrumentation=2 --with-system-valgrind-headers --CFLAGS='-g -O0 -fPIC' FFLAGS='-g -O0 -fPIC' CXXFLAGS='-g -O0 -fPIC' FCFLAGS='-g -O0 -fPIC'
$make
$sudo make install
这将在/usr/local/lib/R
.
注意:需要 -g 和 -O 来添加调试符号并确保编译优化不会妨碍调试。
为带有 C 源代码的 R 包设置正确的目录结构。使用 makefile 而不是依赖 Eclipse-StatET 来构建项目。使设置更容易移植到 Windows。
在命令行或使用 Makefile 安装 R CMD 会将包安装到用户的本地 R 库。
在 Eclipse (Luna) 下,在 C/C++ 应用程序下创建一个“新调试配置”。
在“主要”选项卡下:
一个。选择一个 C/C++ 应用程序:
/usr/local/lib/R/bin/exec/R
湾。Project 可能指向 R-package 项目。
C。选中“将过程输入和输出连接到终端”。
--slave --vanilla --no-save
一个。LD_LIBRARY_PATH:/use/local/lib/R/lib
湾。R_HOME /usr/local/lib/R 选择“将环境附加到本机环境”
一个。选择 GDB 调试器gdb
湾。如果“GDB 命令集”未作为选项显示,请单击最底部的“选择其他...”。选择“旧版创建流程启动器”。这样做现在将显示用于选择 GDB 命令集的选项: Pick Standard with protocol mi
。
一个。使用 R 源添加 R 目录的绝对路径(可选)~/Downloads/R
湾。将绝对路径添加到包 src 目录和任何其他依赖库。
您应该先运行 R。然后您应该运行该包并将其附加到 R 进程(调试配置 > C/C++ 附加到应用程序)。R 和 eclipse 都必须以 root 身份运行。
共享库必须是 ...dll 或 ...so 的地址,即 R 包库。
注意 1:您应该设置 eclipse 来编译 R 包。