web-dev-qa-db-ja.com

メモリリーク検出ツール

AppleのXcode開発環境には、メモリリーク検出のためのツールがありますか?

特に、iPhone SDKに適用されるツールに興味があります。現在、趣味のプログラミングプロジェクトのための私のお気に入りのプラットフォーム

上記のツールのドキュメント/チュートリアルは非常に役立ちます。

64
SytS

Leaksと特に呼ばれるものがあり、前のポスターが言ったように、それを実行する最も簡単な方法はXcodeから直接です:

実行->パフォーマンスツールで開始->リーク

メモリリークの検出に非常に優れているようで、私のような非Cの頭にとっては簡単に理解できました。

65
rustyshelf

Xcode 6のProfileメニューからProductを選択して、AppleのInstrumentsツールを起動します。 (アプリケーションは、Xcodeアプリケーションのパッケージコンテンツ内にあります:/Applications/Xcode.app/Contents/Applications/

商用の代替手段は OmniObjectMeter です。 (オムニグループにより廃止)

25
titaniumdecoy

Clang Static Analyser は、C、C++、Objective-Cコードのバグを見つけるのに最適です。

12
lajos

Ios/macアプリケーションのメモリリーク/パフォーマンスを検出するためにxcodeの計測器を使用するためのリンクを次に示します Xcodeから計測器を実行する手順

6
silentBeep

Xcode内でmenu -> run -> start with performance tool -> ...を介してツールを実行できます

6
catlan

AppleのXcode開発環境には、メモリリーク検出のためのツールがありますか?

特に、iPhone SDKに適用されるツールに興味があります。

はい。 Appleはそれらを「インストゥルメント」と呼びます(単なるメモリツールではありません)。

Appleの Introduction to Instruments User Guide 。特に、 Locating Memory Issues in Your App 。メモリ指向のトレーステンプレートの使用方法の例を示します。

5
jww

ObjectAllocとMallocDebugの両方が役立つはずです。 SDK全体をインストールした場合、それらはDeveloper-> Applications-> Performance Toolsにあります。

それらの名前は、その機能、OA、オブジェクト作成の追跡、およびMAが一般的なメモリリークツールについてのかなり良い手がかりを与えてくれます。

私はまだiPhoneの開発でそれらを試していませんが、彼らもそこで働くと信じなければなりません。

ADC iPhone開発者サイトに登録していると仮定すると、ここのリンクは次のとおりです: Instruments User Guide

4
KevDog

rustyshelf's solution シミュレーターではなく、iPhoneでテストしてください。メモリ使用量は劇的に異なります。

4
schwa

メインメモリリークツールの要約: iphone-essential-performance-tools-list

4

これも試してみてください、Xcodeインストゥルメントから始めるための簡単なチュートリアル

メモリリークツール: http://www.raywenderlich.com/2696/

基本: http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode

enter image description here

ステップ1.割り当てツールを選択します

  1. 割り当てのプロファイリングテンプレートを選択します。

enter image description here

  1. メインのInstrumentインターフェースで、VM Trackerがあれば、それをクリックし、Deleteキーを押します。特定の機器が不要になるためです。

enter image description here

右上のプラスボタンをクリックすると、さまざまな種類のテスト用にさらに機器を追加できますが、このチュートリアルではそれらについて説明しません。

ステップ2.機器の設定をセットアップします

分析を実行する前に、いくつかの作業が必要です。まず、アプリがインストールされているiOSデバイスを接続する必要があります。 iOSシミュレーターはまだシミュレーターであり、アプリでのメモリー使用量や、メモリーが圧迫された場合のアプリの動作を正確に表さない場合があるため、物理デバイスでなければなりません。

ターゲットを選択するには、上部近くのマイコンピューターをクリックし、デバイスにカーソルを合わせて、サブメニューからアプリを選択します。

enter image description here

次に、表示する割り当てのタイプの設定を変更できるパネルがあります。 Created&Persistentバブルがチェックされていることを確認する以外に、事前に行う必要のあることはあまりありません。

enter image description here

ステップ3.レコードを押して機器を実行します

左上の[記録]ボタンを押すと、デバイスでアプリが起動し、Instrumentsが割り当てのグラフを作成し始めます。ここで行う必要があるのは、アプリを実行して、問題の可能性のある領域に焦点を合わせ、割り当て解除よりも多くのメモリが割り当てられているかどうかを確認することだけです。これは、多くの反復的なタスクを実行することを意味する場合がありますが、後で自分に感謝します。

次のようなものが表示されるはずです。

enter image description here

アプリを一度実行して、メモリ内の安定したポイントに到達することをお勧めします。そうすれば、増加が顕著になる良いベースラインが得られます。テストするのに十分なデータがあることを確認したら、左上の停止ボタンを押します。

ステップ4.分析

  1. 最初に行うことは、検査範囲を設定して、ベースラインでの持続バイトの合計を測定することです。その永続的なバイト番号は、割り当ての要約のすぐ下にあります。

enter image description here

実際に検査範囲を設定するには、左側の検査範囲にキーボードショートカットCommand <Command>正しい検査範囲の場合。このアプリでは、約20MBのベースラインがあります。

enter image description here

  1. 次に、適切な検査範囲を、アプリを再度実行してルートに戻ったポイントに移動します。ここでは、メモリがほぼ同じであることがわかります。したがって、これをさらに数回実行し、メモリがベースラインに戻ることを確認することで、大きなメモリの問題はないと想定できます。

enter image description here

このデータを分析するにはさまざまな方法がありますが、ここでは説明しませんが、データを表示および分析する方法のドロップダウンメニュー全体があることに注意してください。

enter image description here

ステップ5.世代をマークする

検査範囲をそれほど扱いたくない場合は、マーク生成と呼ばれる機能があります。楽器の右側のパネルにボタンがあります。

enter image description here

このボタンは、検査ラインの場所に基づいて機器のタイムライン上のポイントをマークします。これは、前のマーク以降のすべての割り当てを追跡するため、または他のマークがない場合は最初から追跡するために行います。この例のように、割り当てインスツルメントの実行中または実行の停止後に世代をマークできます。

enter image description here

ステップ6.スタックトレースをチェックアウトする

最後に説明するのは、スタックトレースを見ることです。そのためには、検査範囲を設定してすべての割り当てを強調表示し、Created&Persistentバブルが右側のパネルで選択します。統計ビューで、永続バイトが最高から最低にソートされていることを確認します。ここには多くの割り当てがあり、それらの多くはシステム割り当てであるため、何が起こっているのかを理解するのは困難です。

enter image description here

深くなる

  1. 最大の割り当てを見て、右向きの矢印をクリックします。多くの場合、クリックしたものの中に割り当てがあり、その多くはあなたにとって意味がありません。

enter image description here

  1. 矢印をクリックした後、さまざまな割り当てを強調表示しながら、右側のパネルで詳細を確認してください。最終的に、プロジェクトの実際のコードにつながる大胆なテキストに遭遇し、問題が何であるかがわかります。

enter image description here

  1. スタックトレースの太字の項目の1つをダブルクリックすると、実際のコードに移動します(所有しているアプリで割り当てを実行したと仮定)。

enter image description here

  1. このビューには多くの便利な機能があります。1つは右側にある黄色のタグで、各メソッド呼び出しがどれだけのメモリを使用しているかを示しています。開発者は、強調表示されたメソッドが問題であるか、最適化できるものであるか、アプリの避けられない部分であるかを判断する必要があります。

  2. 私の場合、そのUIColor変数は永続的であり、アプリ全体で使用されるため、アプリの寿命全体を通して受け入れられます。

ここにあります

3
David Seek