このアプローチに従って、iOSアプリでValgrindを実行しました。残念ながら、iOS SDKに関連する警告により、私のアプリに関連する警告を見つけることはほとんど不可能です。ValgrindのiOS抑制のリストがあるので、自分で生成する必要はありませんか?
1 に答える
main()
Valgrindに適切なオプションを渡すように、おそらく自分の中にあるコードを変更できるようです。(これは、デフォルトのオプションであるmemcheckを実行していること、およびペーストビンから実行しているように見えることを前提としていることに注意してください)。
Valgrind / Memcheckは、Obj-C /iOSSDKを含む既存のライブラリのエラーを報告することが期待されています。Memcheckによるエラーの報告を抑制するには、次を使用します。
これにより、抑制が自動的に生成されます。--gen-suppressions=yes
また、もう少し深く掘り下げて、見たくないものをカスタマイズすることもできます。
考慮される抑制ファイルを追加します。
--suppressions=/path/to/file.supp.
抑制タイプ(2番目)の行は次の形式である必要があります。
Memcheck:suppression_type
Memcheck抑制タイプは次のとおりです。
Value1, Value2, Value4, Value8, Value16
、1、2、4、8、または16バイトの値を使用する場合の初期化されていない値のエラーを意味します。
Cond (or its old name, Value0)
、初期化されていないCPU条件コードの使用を意味します。
Addr1, Addr2, Addr4, Addr8, Addr16
、それぞれ1、2、4、8、または16バイトのメモリアクセス中の無効なアドレスを意味します。
Jump
、アドレスできない場所のエラーへのジャンプを意味します。
Param
、無効なシステムコールパラメータエラーを意味します。
Free
、無効または不一致がないことを意味します。
Overlap
、memcpyまたは同様の関数でのsrc/dstオーバーラップを意味します。
Leak
、メモリリークを意味します。
詳細については、Valgrindドキュメントの抑制エラーも確認してください。複数の抑制ファイルを使用できることに注意してください。後でいつでも削除できる独自のファイルを作成します。
ただし、これらのエラーが表示される理由を確認することをお勧めします。それらの多くはSDKであるように見えますが、無視したい場合がありますが、念のため、トラックの原点をオンにして(実行した)、独自のコードを確認した後かもしれません。
初期化されていない値のエラーは、初期化されていない値について警告されている場所です(duh)-ただし、初期化されていない値には他の用途があるため、違いを生む初期化されていない値がある場合にのみこれが行われます。
通常、これらは、「使用すべきでない」場所で使用するまで伝播できます。これらの値は、実際に使用しようとするたびに報告されます。
--track-origins=<yes|no>
それらがどこから来ているかを見つけるためにオンにできる(デフォルトはno)ことができることはすでに知っていますが、SDKからのもののように見えます。知らない人にとっては、--track-origins
オフのときは初期化されていない値が「危険な」方法で使用されていることだけを知っているので、非常に役立ちますが、初期化されていない値がどこから来たのかわかりません。
--undef-value-errors=no
も使用されている場合、Memcheckはこれをyesに設定することを拒否することに注意してください。