質問

AppleのXcode開発環境は、メモリリーク検出のためのツールを提供していますか?

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

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

役に立ちましたか?

解決

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

  
    

run-<!> gt;パフォーマンスツールで開始-<!> gt;リーク

  

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

他のヒント

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

商用の代替手段は OmniObjectMeter です。オムニグループ)

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

これは、ios / macアプリケーションのメモリリーク/パフォーマンスを検出するためにxcodeの計測器を使用するためのリンクです Xcodeから機器を実行する手順

menu -> run -> start with performance tool -> ...

でXcode内でツールを実行できます
  

AppleのXcode開発環境は、メモリリーク検出のためのツールを提供していますか?

     

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

はい。 Appleはそれらを<!> quot; Instruments <!> quot;と呼びます。 (単なるメモリツールではありません)。

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

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

これらの名前は、その機能であるOA、オブジェクト作成の追跡、およびMAが一般的なメモリリークツールであることを示す非常に良い手がかりになります。

iPhoneの開発ではまだ試していませんが、そこでも機能すると信じなければなりません。

ADC iPhone開発者サイトに登録している場合、次のリンクを参照してください。 Instruments User Guide

rustyshelf's solution を使用する場合は、必ずシミュレーターではなくiPhone。メモリ使用量は劇的に異なります。

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

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

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

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

ここに画像の説明を入力してください

ステップ1.割り当て手段を選択

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

ここに画像の説明を入力してください

  1. メインのインストルメントインターフェイスで、VMトラッカーが存在する場合はクリックし、特定のインストゥルメントが不要になるためDeleteキーを押します。

ここに画像の説明を入力してください

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

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

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

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

ここに画像の説明を入力してください

次に、表示する割り当てのタイプの設定を変更できるパネルがあります。 作成済み<!> amp;永続的バブルがチェックされ、事前に行う必要のあることはほとんどありません。

ここに画像の説明を入力してください

ステップ3.記録を押して機器を実行します

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

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

ここに画像の説明を入力してください

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

ステップ4.分析

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

ステップ6.スタックトレースを確認する

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

ここに画像の説明を入力してください

深く行く

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

  2. この場合、そのUIColor変数は永続的であり、アプリ全体で使用されるため、アプリの有効期間全体にわたって受け入れられます。

こちら

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top