4

まず、実質的に同じタイトルの別の質問が存在することを認識していますが、その質問に対する回答はここでは役に立ちません。別の質問が近づいていますが、ここでも解決策は私がここで使用できるものではありません。

私のアプリケーションは、Valgrindが本当に気に入らない共有ライブラリを使用しています。それは生成します:

Program Exception - illegal instruction
Image              PC                Routine            Line        Source             
libirc.so          000000000405ED3C  Unknown               Unknown  Unknown
libhdf5.so.7       00000000061338E2  Unknown               Unknown  Unknown
libhdf5.so.7       00000000061A73CE  Unknown               Unknown  Unknown
libhdf5.so.7       00000000061A9D6F  Unknown               Unknown  Unknown
libhdf5_fortran.s  0000000006B23233  Unknown               Unknown  Unknown
libhdf5_fortran.s  0000000006B19FF9  Unknown               Unknown  Unknown
les3d.x            00000000006D815C  Unknown               Unknown  Unknown

そして、それが私のアプリケーションに入る前に死にます(まあ、それは私のアプリケーションに入りますが、私たちが最初に行うことは、それが死ぬ場所である共有ライブラリを初期化するルーチンを呼び出すことです)。Valgrindなしで実行しても違法な命令は発生しませんが、奇妙なsegfaultが発生するため、メモリチェッカーが必要になります。したがって、それは完全に使用不可能であり、それがエラー抑制が機能しない理由です。

Valgrindがアプリケーションによって呼び出された共有ライブラリで動作するのを実際に防ぐことは可能ですか?出力を抑制しませんが、実際には出力を抑制しません。そうでない場合、防止できるメモリチェッカーはありますか?

4

1 に答える 1

3

まず最初に、この問題を報告する必要があります。これを行う方法については、valgrindのWebサイトに情報があります。

あなたが見ていることは、valgrindのJITがあなたのマシンで無効な命令を生成していることを示唆していますが、これは実際には起こり得ないはずです。

あなたの直接の質問に答えるために、それは意味がないので、あなたが望むことをする方法はありません-valgrindがあなたのプログラムが行うすべての読み取りと書き込みを見ることができない限り、それはの状態を追跡することはできませんメモリが適切であり、監視しているプログラムの部分のエラーを検出できません。誤検知と誤検知の両方が発生します。

于 2012-11-28T21:08:12.803 に答える