2

マルチスレッド (pthread ベース) プロジェクトに取り組んでいます。このプロジェクトでは、私が書いているライブラリを使用しています。

それを確認するためにリンクすると-lefence、SIGSEGVが得られました。何が問題なのかを理解するのに多くの時間を費やした後、機能が非常に単純であっても、最終的にライブラリでエラーを検索することにしました。

テストとして、テストユニットをリンクしてコンパイルしようとしましたが、-lefenceSIGSEGV を取得しました。テストは、異なるテストユニットで成功したコードを除いて、動的に割り当てられたメモリをいじっていません。

-pthreadまた、フラグがメモリ割り当てをラップとして設定していることにも気付きました。gcc -dumpspecs | grep pthread以下を生成します。

%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
%{pthread:-lpthread}    %{shared:-lc}    %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}
 %{static: %{fmudflap|fmudflapth:  --wrap=malloc --wrap=free --wrap=calloc --wrap=realloc --wrap=mmap --wrap=munmap --wrap=alloca} %{fmudflapth: --wrap=pthread_create}} %{fmudflap|fmudflapth: --wrap=main}

libefence がマルチスレッドをサポートしていない可能性はありますか?

編集:基本的に、電気フェンス ライブラリが通常の libc の malloc/free 呼び出しを置き換えると仮定しています。それらがスレッドセーフなフードでラップされているという事実は、再入不可のもので再びラップされているため、役に立ちません。

4

3 に答える 3

3

これら2つを確認してください-phthreadに問題があったことは間違いありません( https://bugzilla.redhat.com/show_bug.cgi?id=54368 )が、最近誰かが修正を主張しました( http://www.mail-archive.com /debian-bugs-closed@lists.debian.org/msg280548.html ) 別の遅延パッチについての言及にも注意してください。

于 2010-08-03T23:59:21.017 に答える
3

valgrindを試しましたか?

于 2010-07-29T23:31:08.037 に答える
2

それを確認するために、-lefence とリンクしたところ、SIGSEGV が表示されました。何が問題なのかを理解するのに多くの時間を費やした後、機能が非常に単純であっても、最終的にライブラリでエラーを検索することにしました。

私は電気柵の概念しか知りませんが、バッファ オーバーフローが発生した場所はすぐにわかるはずです。

gcc ... -g ;
gdb a.out ;
run 
**Program received signal SIGSEGV, Segmentation fault.
address in function () from file.c**

そしてあなたのオーバーフローがあります!

于 2010-07-25T08:05:20.820 に答える