Android はアプリケーションのメモリをどのように分析しますか (15) - Visual Studio Code の Android アプリケーションのデバッグ

Android はアプリケーションのメモリをどのように分析しますか (15) - Visual Studio Code の Android アプリケーションのデバッグ

前回の記事では、Java アプリケーションの jdb デバッグについて紹介しましたが、
次は、jdb と同じ効果を得るために、UI インターフェイスを使用して Java アプリケーションをデバッグする方法を紹介します。
同じ UI インターフェースでも、Eclipse、Android Studio、Visual Studio Code など選択肢はたくさんありますが、Android Studio は不便な点が多く、またご自身の使用習慣に合わせて、ここでは Visual Studio Code を推奨し、紹介します。

必要なプラグインをインストールする

プラグイン マーケットで、以下に示すように Debugger for Java を検索します。
ここに画像の説明を挿入します


要件を表示するには、以下に示すように、プラグイン マーケットでRed Hat Search の Language Support for Java™ をインストールしてインストールする必要もあります。
ここに画像の説明を挿入します

  • Red Hat による Java™ の言語サポート: コード検索、コンテキスト プロンプト、その他の機能。
  • Java用デバッガ:デバッグ機能

もちろん、上記 2 つのプラグインや Java 開発に必要なその他のプラグインが含まれる Extension Pack for Java パッケージを直接インストールすることもできます。

データをより便利に表示するために、プラグイン Debug Visualizer をインストールできます。
ここに画像の説明を挿入します

Debug Visualizer は変数間の関係をグラフィカルに表示できます

ターゲットプロセスへのアタッチを構成する

メニュー -> 実行 -> 構成を開く
ここに画像の説明を挿入します

次の内容を構成ファイルに追加します。

{
    
    
    "launch": {
    
    
        "configurations": [
            ...
            {
    
    
                //debugger for java插件对应的一个名字。必须为java
                "type": "java",
                //给这个配置取的一个名字
                "name": "远程调试Android应用",
                //因为是远程调试,只能为attach
                "request": "attach",
                //远程调试的主机名,使用了adb forward 映射到了本地,因此为:localhost
                "hostName": "localhost",
                //远程调试的端口号,使用了adb forward映射到了5039
                "port": 5039,
                //需要调试的源代码文件
                //第一个是我们测试APP的源文件位置
                //第二个是http://t.csdn.cn/JBnld中下载的Android 12的源码
                "sourcePaths": [
                    "/Users/biaowan/AndroidStudioProjects/Test_Malloc.old/app/src/main/java",
                    "/Users/biaowan/aosp/frameworks/base/core/java"
                ]
            }
        ]
    },
}

以下に示すように
ここに画像の説明を挿入します

上の図の最初の 2 つは、Android がアプリケーション メモリをどのように分析するかを示しています (4) - Visual Studio コードの LLDB で使用されるデバッグ構成です。

テストを開始する

  1. ブレークポイントを追加し
    、VSCode を使用してテスト APP のプロジェクト ファイルを開きます。次に MainActivity.java を開き
    、 onCreate にブレークポイントを追加してチェックアウトします。以下に示すように
    ここに画像の説明を挿入します

  2. アプリが起動したら停止します。「Android アプリケーション メモリを分析する方法 (14) - jdb コマンド ラインのインスタント デバッグ セクション」
    に従って、次のコードを実行します。

adb shell am set-debug-app -w com.example.test_malloc

次に、アプリケーションを起動します。この時点で、アプリケーションは停止し、「デバッガーを待機しています」と表示されます。
詳細な手順については、「Android でアプリケーションのメモリを分析する方法 (14) - jdb コマンド ライン」を参照してください。

  1. ポートの転送
    次のコマンドを実行して、Android デバイス内のポートをローカル マシン 5039 に転送します。
pid=($(adb shell ps -A |grep -i  malloc)) ; echo ${pid[2]};adb forward tcp:5039 jdwp:${pid[2]};
  1. VSCode デバッグを実行するには
    、ショートカット キー command+p を使用してファイル検索ボックスに入り、「debug」とスペースを入力します。対応するデバッガーを選択するだけです。
    ここに画像の説明を挿入します

すべてが正常であれば、次のように vscode がブレークポイントで停止します。
ここに画像の説明を挿入します

上記のように、日常のデバッグに必要なほとんどすべてを確認できます。のように

  1. 変数の表示と変更
  2. ウォッチポイントの追加、削除
  3. スイッチスタックフレーム
  4. 単一スレッドを一時停止する
  5. 例外をキャッチする

ただし、vscode のデバッガー プラグインは、jdb コマンドを直接実行するためのインターフェイスを提供しません。コンソールでは式のみを実行できます。次のように
ここに画像の説明を挿入します

トラブルシューティング

問題: デバッグ コンソールで式が正しく実行されない

解決する:

  • スイッチスタックフレームと変数
  • プラグインのバージョンを切り替えるか、最新のものにアップデートしてください

データ構造を表示するためのデバッグ ビジュアライザー

3 番目のプラグイン Debug Visualizer は以前にインストールされており、データ構造を表示するために使用できます。次のように、ウォッチポイントに表示されるすべてを表示できます。

  1. command+shitf+p: コマンド入力ボックスを開きます

  2. タイプ: デバッグ ビジュアライザー: 新しいビュー
    ここに画像の説明を挿入します

  3. 次に、新しく開いた UI ボックスに、表示する必要がある変数を入力します。以下に示すように
    ここに画像の説明を挿入します

サイズを調整すると、変数間の関係が明確にわかります。

注: Debug Visualizer は現在、現在のスタック フレームの変数のみを表示できます。

この時点で、VSCode の Java デバッグの概要は完了です。

ここで、Android Studio に Java デバッグの入門がない理由を説明する必要があります。私の現在の使用習慣から判断すると。Android Studio はアプリ開発者にとって最適です。ただし、いくつかの欠点があります。

  • 他人のアプリケーションをデバッグする ソースコードしかなくコンパイルできない、ネイティブアプリケーションなどのデバッグが難しい
  • Android Studio が異常動作してフリーズする

したがって、アプリケーション開発者であってもフレームワーク開発者であっても、デバッグには VS コードを使用することをお勧めします。

次のセクションでは、Android のヒープメモリを表示する方法を紹介します。Android アプリケーションにとって、今が最も重要な瞬間であると思われます。乞うご期待

おすすめ

転載: blog.csdn.net/xiaowanbiao123/article/details/132067245