2017-11-02 6 views
0

Rcppコードのセグメント違反をトレースしたいと思います。これを行うために、私は "メイン" C++関数を実装し、GDBで自分のコードを実行したいと思います。しかし、私はこの主な機能を働かせることはできません。ここで、最小の例である:Rcppコードをコンパイルするとセグメント化エラーが発生します

#include <Rcpp.h> 

int main (int argc, char** argv) { 
    Rcp::NumericVector i; 
    return 0; 
}; 

Iは、コードをコンパイルするためにRcppによって使用されるフラグを使用する:(私はいくつかの味を試してみました。:fpic-Wlを除去)g++ -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o main main.o -L/usr/lib/R/lib -lR -g -ggdb -O0そして

g++ -I/usr/share/R/include -DNDEBUG -I"/home/login/R/x86_64-pc-linux-gnu-library/3.3/Rcpp/include" -fpic -g -ggdb -O0 -fdebug-prefix-map=/build/r-base-6WVosl/r-base-3.3.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -c main.cpp -o main.o

mainを実行すると、セグメント化エラーが発生します。

GDBのバックトレースは

#0 0x00007ffff78f5ac5 in ??() from /usr/lib/libR.so 
#1 0x00007ffff78f6a17 in ??() from /usr/lib/libR.so 
#2 0x00007ffff78f70ad in Rf_allocVector3() from /usr/lib/libR.so 
#3 0x0000555555556856 in Rcpp::Vector<14, Rcpp::PreserveStorage>::Vector (this=0x7fffffffe1e0) at /home/login/R/x86_64-pc-linux-gnu-library/3.3/Rcpp/include/Rcpp/vector/Vector.h:58 
#4 0x00005555555560ec in main (argc=1, argv=0x7fffffffe2f8) at main.cpp:7 

Valgrindのは、同じ場所でInvalid read of size 8示唆私に与えます。

どのようなご提案も歓迎いたします。

g ++は(Ubuntu 6.3.0-12ubuntu2) 6.3.0 20170406です。コンピュータはLinux XXX 4.10.0-38-generiC#42-Ubuntu SMP Tue Oct 10 13:24:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linuxです。

+0

あなたはいくつかのことを誤解して誤って解釈していますが、一般的には[RInside](http://dirk.eddelbuettel.com/code/rinside.html)を詳しく見ていきたいと思います。 –

+0

@DirkEddelbuettelありがとうございました。非常に素晴らしいプロジェクトです。しかし、私の目的は、可能であれば、より大きなRパッケージの一部であるRcppコードをGDBでデバッグすることです。いくつかのRをC++に埋め込むことはここではできませんよね? – unamourdeswann

+1

あなた。できません。コンパイル。 Rcpp。クラス。なし。あなたの 'main()'は単に動作しません。 Rcppは_an R extension_です。 –

答えて

1

あなたは、単に基礎となるRセッションでRcppコードのmain()gdbを使用することはできません。すべて Rオブジェクトがそう

R.

必要のいずれかのgdbでRからあなたのパッケージをデバッグ - described in Section 4.4 of Writing R Extensionsとして、あるいは場合 RInsideを使用あなたは本当にあなたはメインが必要だと思います。

お客様gdbを使用してください。ちょうどあなたが試みた方法ではない。

関連する問題