8

iOSのメモリリークを追跡するのを手伝ってください。ありがとう!

xCode 4.0.1を使用していて、メモリリークを追跡するためにNSZombieをアクティブ化しようとしましたが、xCode3.xでは以前のように機能しないようです。

Instrumentsがこれを指摘しているように、メモリリークがどこから来ているのかわかりません。

リークされたオブジェクト-> GeneralBlock-32 アドレス-> 0x4c8600 サイズ-> 32バイトの 責任あるライブラリ-> libsystem_c.dylib 責任のあるフレーム/呼び出し元-> strup

この時点では、NSZombieでInstrumentsをxCode 4で正しい方法で使用しているかどうかはわかりません。詳細については、左側のオプションLeaksの下にある[i]をクリックしてもNSZombieオプションが表示されないためです。

観察:私のiPhoneアプリケーションは、ライブストリームmms/wmaとwmaáudioファイルを有限の時間で再生しますリークは有限のwmaファイルでのみ発生しますが、ストリーミングされたソースから再生しているときは完全に実行され、終了時間はありません。

4

2 に答える 2

10

まず、それはmallocブロックであり、オブジェクトではありません。ゾンビは機能しません(以前のバージョンでも機能しませんでした)。

そのリークは何回発生しますか?一度?ご心配なく。ストリームごとに1回?バグを報告します-これまでに投稿したものからコードに含まれていません(コードが呼び出している場合を除きますstrdup。これは確かに可能ですが、サードパーティのライブラリを多用していないほとんどのiOSアプリでは一般的ではありません...あなたは?)

いずれにせよ、アプリの実行時に数百から数百の32バイトの割り当てがリークされない限り、心配する必要はありません(ただし、バグを報告してください)。

Valkioが言ったように、gdb(またはInstruments)から直接割り当てのスタックトレースを取得できます。

于 2011-05-05T15:23:54.730 に答える
5

これを行うと、割り当てられた場所を確認できます。

  1. 「製品」->「スキームの編集」->「実行(デバッグ)」->「引数」に移動します。
  2. これを環境変数に追加します:MallocStackLoggingNoCompact
  3. はいに設定します
  4. 実行して、クラッシュさせます。
  5. console(gdb)infomalloc0x4c8600またはアドレスが何であれ入力します。
于 2011-05-05T15:18:18.143 に答える