NativeHeapを有効にしてスナップショットを撮って、C ++コードのメモリリークにAndroidツールDDMSを使用する方法を試しましたが、スナップショットが何を言っているのか理解できず、シンボルが解決されず、ファイル名と行番号が表示されません.
2 に答える
DDMS のネイティブ ヒープ トラッキングは、サポートされていない「ステルス」機能です。それを機能させるのは少し難しいかもしれません。役に立つかもしれない古い議論がメーリング リストにあります。
データを受信していて、UI を起動している場合は、途中までです。:-) DDMS は、環境変数でオーバーライドできる特定の場所でシンボルを探し、ANDROID_SYMBOLS
アドレスを行に変換しますaddr2line
(これも見つけられる必要があります)。
大きなリークを探す最も簡単な方法は、割り当てをライブラリ別にソートするように DDMS を構成することです。アプリをしばらく実行して、どのライブラリが最も急速に成長しているように見えるかを確認します。そのライブラリに起因する割り当てを見て、同じ場所から来ているものがたくさんあるかどうかを確認してください。スタック トレースを見て、そこから長期間有効な割り当てを多数持つことに意味があるかどうかを確認してください。あまり厳密ではありませんが、うまくいくことがよくあります。
ヒープをより徹底的に調べるために、デバイスで valgrind を実行できますが、初めてセットアップするのはそれほど簡単ではありません。
割り当てトラッカーを使用します。Android でメモリ リークを見つけることについてのすばらしい話があります: http://www.youtube.com/watch?v=_CruQY55HOk
そして、ここにそれに関するブログ投稿があります: http://www.curious-creature.org/2009/02/07/track-memory-allocations-on-android/