AppleのXcode開発環境には、メモリリーク検出のためのツールがありますか?
特に、iPhone SDKに適用されるツールに興味があります。現在、趣味のプログラミングプロジェクトのための私のお気に入りのプラットフォーム
上記のツールのドキュメント/チュートリアルは非常に役立ちます。
Leaks
と特に呼ばれるものがあり、前のポスターが言ったように、それを実行する最も簡単な方法はXcodeから直接です:
実行->パフォーマンスツールで開始->リーク
メモリリークの検出に非常に優れているようで、私のような非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から計測器を実行する手順
Xcode内でmenu -> run -> start with performance tool -> ...
を介してツールを実行できます
AppleのXcode開発環境には、メモリリーク検出のためのツールがありますか?
特に、iPhone SDKに適用されるツールに興味があります。
はい。 Appleはそれらを「インストゥルメント」と呼びます(単なるメモリツールではありません)。
Appleの Introduction to Instruments User Guide
。特に、 Locating Memory Issues in Your App
。メモリ指向のトレーステンプレートの使用方法の例を示します。
ObjectAllocとMallocDebugの両方が役立つはずです。 SDK全体をインストールした場合、それらはDeveloper-> Applications-> 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.割り当てツールを選択します
右上のプラスボタンをクリックすると、さまざまな種類のテスト用にさらに機器を追加できますが、このチュートリアルではそれらについて説明しません。
ステップ2.機器の設定をセットアップします
分析を実行する前に、いくつかの作業が必要です。まず、アプリがインストールされているiOSデバイスを接続する必要があります。 iOSシミュレーターはまだシミュレーターであり、アプリでのメモリー使用量や、メモリーが圧迫された場合のアプリの動作を正確に表さない場合があるため、物理デバイスでなければなりません。
ターゲットを選択するには、上部近くのマイコンピューターをクリックし、デバイスにカーソルを合わせて、サブメニューからアプリを選択します。
次に、表示する割り当てのタイプの設定を変更できるパネルがあります。 Created&Persistentバブルがチェックされていることを確認する以外に、事前に行う必要のあることはあまりありません。
ステップ3.レコードを押して機器を実行します
左上の[記録]ボタンを押すと、デバイスでアプリが起動し、Instrumentsが割り当てのグラフを作成し始めます。ここで行う必要があるのは、アプリを実行して、問題の可能性のある領域に焦点を合わせ、割り当て解除よりも多くのメモリが割り当てられているかどうかを確認することだけです。これは、多くの反復的なタスクを実行することを意味する場合がありますが、後で自分に感謝します。
次のようなものが表示されるはずです。
アプリを一度実行して、メモリ内の安定したポイントに到達することをお勧めします。そうすれば、増加が顕著になる良いベースラインが得られます。テストするのに十分なデータがあることを確認したら、左上の停止ボタンを押します。
ステップ4.分析
実際に検査範囲を設定するには、左側の検査範囲にキーボードショートカットCommand <とCommand>正しい検査範囲の場合。このアプリでは、約20MBのベースラインがあります。
このデータを分析するにはさまざまな方法がありますが、ここでは説明しませんが、データを表示および分析する方法のドロップダウンメニュー全体があることに注意してください。
ステップ5.世代をマークする
検査範囲をそれほど扱いたくない場合は、マーク生成と呼ばれる機能があります。楽器の右側のパネルにボタンがあります。
このボタンは、検査ラインの場所に基づいて機器のタイムライン上のポイントをマークします。これは、前のマーク以降のすべての割り当てを追跡するため、または他のマークがない場合は最初から追跡するために行います。この例のように、割り当てインスツルメントの実行中または実行の停止後に世代をマークできます。
ステップ6.スタックトレースをチェックアウトする
最後に説明するのは、スタックトレースを見ることです。そのためには、検査範囲を設定してすべての割り当てを強調表示し、Created&Persistentバブルが右側のパネルで選択します。統計ビューで、永続バイトが最高から最低にソートされていることを確認します。ここには多くの割り当てがあり、それらの多くはシステム割り当てであるため、何が起こっているのかを理解するのは困難です。
深くなる
このビューには多くの便利な機能があります。1つは右側にある黄色のタグで、各メソッド呼び出しがどれだけのメモリを使用しているかを示しています。開発者は、強調表示されたメソッドが問題であるか、最適化できるものであるか、アプリの避けられない部分であるかを判断する必要があります。
私の場合、そのUIColor変数は永続的であり、アプリ全体で使用されるため、アプリの寿命全体を通して受け入れられます。