我不知道如何为我的 R 包的共享库的调试符号提供源代码行信息。我错过了什么?
-
我创建以下
src/Makevars
文件:PKG_CXXFLAGS=-O0 -ggdb PKG_LIBS=-O0 -ggdb
-
我使用
R CMD INSTALL --no-multiarch --with-keep.source
编译包:* installing to library ‘~/.local/lib/R/3.6’ * installing *source* package ‘reticulate’ ... ** using staged installation g++ -std=gnu++11 -I"/usr/include/R/" -DNDEBUG -I"$HOME/.local/lib/R/3.6/Rcpp/include" -D_FORTIFY_SOURCE=2 -O0 -ggdb -fpic -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -c RcppExports.cpp -o RcppExports.o ** libs g++ -std=gnu++11 -shared -L/usr/lib64/R/lib -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -o reticulate.so RcppExports.o event_loop.o libpython.o output.o python.o readline.o -O0 -ggdb -L/usr/lib64/R/lib -lR
安装到 ~/.local/lib/R/3.6/00LOCK-reticulate/00new/reticulate/libs
-
我像这样调试:
R -d gdb --slave -e 'reticulate::py_eval("print")()' GNU gdb (GDB) 8.3 [...] (No debugging symbols found in /usr/lib64/R/bin/exec/R) (gdb) break py_get_formals Function "py_get_formals" not defined. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 1 (py_get_formals) pending. (gdb) run Starting program: /usr/lib/R/bin/exec/R --slave -e reticulate::py_eval("print")() [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". [...] Thread 1 "R" hit Breakpoint 1, 0x00007fffeb6b79a0 in py_get_formals(PyObjectRef, bool) () from /home/angerer/.local/lib/R/3.6/reticulate/libs/reticulate.so (gdb) step Single stepping until exit from function _Z14py_get_formals11PyObjectRefb, which has no line number information. [...]
为什么我的函数没有行号,即使我在两个编译中都指定了-ggdb
?我看到命令行中只提到了RcppExports.cpp
,这是问题所在吗?如果是这样,我该如何更改?
更改 Makevars 不会提示重新编译。
我需要在重新编译目标文件之前rm -f src/*.o src/*.so
。
这是专门针对Windows的。最简单的方法是将R_MAKEVARS_USER环境设置为指向 Makevars.win 文件。这似乎有效。但是,调试断点已停止工作!!!