• ログイン

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

Androidエージェントのネイティブクラッシュレポート

New Relic Androidエージェントバージョン6.7.0以降、ネイティブクラッシュの追跡と診断に役立つように、レポートと分析が拡張され、実行時にネイティブコードレベルで発生する信号違反やその他の障害が含まれるようになりました。

これらの機能強化には次のものが含まれます。

  • ネイティブクラッシュレポート-実行時にアプリによって報告されるシグナル違反やその他のクラッシュ(以下を含む)

    • 信号4(不正な指示)
    • 信号6(異常終了)
    • 信号7(バスエラー/メモリアクセス不良)
    • シグナル8(浮動小数点例外)
    • シグナル11(セグメンテーション違反/無効なメモリ参照)
  • ネイティブランタイム例外ネイティブエージェントは、実行時にアプリによってスローされた未処理のC ++例外を報告し、それらを処理済み例外として報告します。未処理の例外は通常致命的であり、アプリケーションをクラッシュさせます。

  • アプリケーションが応答しない(ANR)状態ネイティブエージェントは、アクティビティまたはサービススレッドがAndroidの許容時間(フォアグラウンドアクティビティの場合は5秒、サービスの場合は5〜200秒)より長くブロックされたアプリケーションの応答しない状態を検出して報告します。ANR状態は、致命的な状態とは見なされないため、(クラッシュではなく) 処理された例外として報告されます。

重要

ネイティブクラッシュレポートは、インキュベーション機能です。ネイティブのクラッシュ監視はせいぜい困難ですが、エージェントはこれらの状態を検出して報告するために最善を尽くします。一部の条件を見逃したり、不完全に報告したり、アプリケーションダッシュボードでこれらの条件を表示するのに時間がかかる場合があります。

ネイティブシンボルのシンボル化は、初期のNDKエージェントリリースではサポートされません。アプリのネイティブシンボルが存在しない場合、クラッシュによって生成されるスタックトレースは、これらの難読化されたラベルのみで構成され、簡単に読み取ることはできません。

New Relic Mobileのクラッシュ分析UIでネイティブクラッシュに関する詳細情報を表示したり、電子メールでクラッシュ通知を受信したりできます。New Relic Insightsを使用してクラッシュデータをより深く調査したり、チケットシステムと統合してさらに調査したりすることもできます。

構成

構成では、新しいRelicエージェントを開始するアプリプロジェクトのbuild.gradleファイルに依存関係を追加する必要があります。

dependencies {
implementation 'com.newrelic.agent.android:agent-ndk:1.+'
}

AndroidネイティブエージェントのアーティファクトはMavenCentralにあり、セマンティックバージョニングの規則に従います。リリースとダウンロードの詳細については、 Androidエージェントのリリースノートを参照してください。

スタートアップ

New Relicエージェント(通常はMainActivity)が追加されているアプリコードで、エージェントを起動する前にNativeReporting機能フラグを有効にします。

NewRelic.enableFeature(FeatureFlag.NativeReporting);
NewRelic
.withApplicationToken("<appToken>")
.start(this.getApplication());

ネイティブクラッシュレポートを無効にする

別のネイティブクラッシュレポートツールを使用する場合は、エージェントの初期化の前にNewRelic.disableFeature{FeatureFlag/NativeReporting)を呼び出して、NewRelicMobileのネイティブクラッシュレポートを無効にします。例えば:

NewRelic.disableFeature(FeatureFlag.NativeReporting);
NewRelic
.withApplicationToken("<appToken>")
.start(this.getApplication());

ネイティブクラッシュレポーターをデバッグする

Androidのクラッシュレポーティングは、他のクラッシュレポーティングフレームワークが登録されている場合は、uncaught exception handlerを連鎖させることで、他のクラッシュレポーティングフレームワークと連携するように設計されています。

レポート中に発生した問題はすべてlogcatに表示されます。New Relicが違反をトラップするたびに、 DEBUGレベルに記録されます。たとえば、セグメント違反の場合、次のように表示されます。

Signal 11 intercepted: Segmentation violation (invalid memory reference)
Invoking previous handler for signal 11

ネイティブレポートの配信は次のアプリの呼び出しまで延期されるため、アプリが再度起動されるまで、NewRelicMobileのユーザーインターフェイスにクラッシュレポートは表示されません。クラッシュが発生した場合、ネイティブエージェントは通常、レポートを処理するのに十分な時間や安定性がありません。代わりに、レポートデータはローカルストレージにすばやく書き込まれ、次にアプリを起動したときに処理されます。

トラブルシューティング

ネイティブレポートは、 /data/data/{app package name}/cache/newrelic/reportsのJSONファイルとしてデバイスに保存されます。このディレクトリには、クラッシュ後のアプリの起動後にレポートが含まれていてはなりません。他のエージェントランタイム情報と同様に、ネイティブエージェントはそのステータスをlogcatに書き込み、エージェントランタイムステータスとブレンドします。Androidエージェントのログタグはcom.newrelic.androidであり、'adb logcat |を実行することで、他のランタイムログから分離できます。 grep "com.newrelic.android"シェルから。

Copyright © 2022 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.