0

私はc で書いた小さなライブラリをラップしようとしていますが、それを機能させるためにホームストレッチをしていると思います。このライブラリにはいくつかのかなりしっかりしたテストがあり、valgrind を実行してメモリ リークや目立った問題を取り除きました。それはそれ自体でかなりしっかりと機能します。

ただし、Ruby を使用してラップしようとすると、segfault が発生します。ライブラリをラップするプロジェクトの例を次に示します。そのプロジェクトのテストが実行されると、ライブラリへの呼び出しで segfault が発生します。それを実行すると、デバッグのために gdb にロードしたコア アボートが発生しますが、何が問題なのかわかりません。コア ダンプには、問題はこの行にあると書かれていますが、与えられた情報は非常にまばらであり、c ランドでテストを実行するとコードがうまく動作するため、何が原因なのかわかりません。

コア ダンプが言う行は segfaultingです:

assert( yypParser->yytos!=0 );

rakeテストによってロードされる共有オブジェクトを最終的に生成するプロセスを開始するルート ディレクトリから実行することで再現できます。Cの経験が豊富な人が見て、正しい方向に向けてくれる可能性があることを願っています。

さらに情報が必要な場合はお知らせください。

コア ダンプのスニペット:

#0  0x00007f150caa2c37 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007f150caa6028 in __GI_abort () at abort.c:89
#2  0x00007f150dba8d8d in die () at error.c:407
#3  rb_bug_context (ctx=ctx@entry=0x7f150f3b1b80, fmt=fmt@entry=0x7f150dbe2f6a "Segmentation fault at %p") at error.c:437
#4  0x00007f150daa45ce in sigsegv (sig=<optimized out>, info=0x7f150f3b1cb0, ctx=0x7f150f3b1b80) at signal.c:890
#5  <signal handler called>
#6  0x00007f150b96b02b in Parse (yyp=0xf9925e0, yymajor=20, yyminor=..., state=0x7ffe17b6a3a0) at parser.c:1919
#7  0x00007f150b96b8e8 in numerize (data=data@entry=0x7f150b96c1aa "one", state=state@entry=0x7ffe17b6a3a0) at ../../../../ext/example_project/fast_numerizer/fast_numerizer.c:102
#8  0x00007f150b960e0b in example_project_c_code_function () at ../../../../ext/example_project/./example_project.c:11
4

0 に答える 0