2012-07-03 14 views
20

私はthis approachに続いて、iOSアプリケーションでValgrindを実行しました。残念ながら、iOS SDKに関連する警告は、私のアプリに関連する警告を見つけることをほとんど不可能にしています。 ValgrindのiOS抑止リストがありますので、自分で生成する必要はありませんか?iOS SDKからValgrindの警告を抑制する

+1

+1、今日新しいことを学びました – doNotCheckMyBlog

+0

あなたは抑制したいmain.mの特別な警告はありますか? – CodaFi

+0

@CodaFi「条件付きジャンプまたは移動は、初期化されていない値に依存しています」ということは、私が間違っていないとSDKからすべてのものが出てきたと思われる場合です。抽出物については、http://pastebin.com/fVHnhNh6を参照してください。 – marcog

答えて

3

main()のコードを修正してValgrindに適切なオプションを渡すことができるようです。 (これは、あなたがmemcheckを実行していることを前提としています。これはデフォルトのオプションで、あなたがペーストビンから実行しているように見えます)。

Valgrind/Memcheckは、Obj-C/iOS SDKを含む既存のライブラリでエラーを報告することが予想されます。エラーを報告からMemcheckを抑制するためには、これを使用する:

これは自動的に抑止を生成します。--gen-suppressions=yes


することもできます/深さにもう少し行くと、あなたがしたくない内容をカスタマイズしたい場合があります参照:

が抑制ファイルを追加を考慮すべき: --suppressions=/path/to/file.supp.

抑制型(第2)のラインの寿LDの形式は:

Value1, Value2, Value4, Value8, Value16を、1、2、4、8または16バイトの値を使用する場合に初期化されていない値の誤差を意味する:以下のように

Memcheck:suppression_type

Memcheck抑制タイプがあります。

Cond (or its old name, Value0)は、初期化されていないCPU条件コードの使用を意味します。

Addr1, Addr2, Addr4, Addr8, Addr16(1,2,4,8または16バイトそれぞれのメモリアクセス中に無効なアドレスを意味します)。

Jumpです。これは、アドレスできない場所のエラーへのジャンプを意味します。

Param(無効なシステムコールパラメータエラーを意味します)。

Free、無効または不一致のフリーを意味します。

Overlapは、memcpyまたは同様の機能でsrc/dstの重複を意味します。

​​、つまりメモリリークを意味します。

詳細については、suppressing errors in the Valgrind docsもチェックしてください。 あなたは複数の抑制ファイルを持つことができますので、いつでも後で削除することができます。


ただし、これらのエラーが表示されている理由で見たいと思うかもしれません。 SDKの多くは無視したいかもしれませんが、可能であればトラックの原点をオンにして、ちょうどあなた自身のコードをチェックした後である可能性があります。

初期化されていない値エラーは、初期化されていない値(duh)について警告されているところです。ただし、初期化されていない値が他にもあるので、違いを出す初期化されていない値がある場合にのみこれを行います。

通常、これらは、使用しないで使用するまで伝播することができます。これらの値は、実際に使用しようとするたびに報告されます。

--track-origins=<yes|no>(デフォルトは「いいえ」)をオンにすると、どこから来たのかを知ることができ、SDKのように見えます。知らない人にとっては、--track-originsは本当に非常に役に立ちます。なぜなら、オフになっていると、初期化されていない値が「危険な」方法で使用されていることが分かりますが、初期化されていない値がどこから来たのか分かりません。

--undef-value-errors=noも使用されている場合、Memcheckはこれをyesに設定することを拒否します。

関連する問題