11

Eclipse 上の Java で開発された Android (4.2.2) アプリケーションでクラッシュが発生しましたが、コードの何が原因であるかがわかりません。. .

スタック トレースは、自分のソース コードを参照していません。. .

スレッド [<1> メイン] (中断 (例外 RuntimeException))
ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) 行: 2255
ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) 行: 2309 ActivityThread.access$700(ActivityThread, ActivityThread$ActivityClientRecord , Intent) 行: 157
ActivityThread$H.handleMessage(Message) 行: 1289
ActivityThread$H(Handler).dispatchMessage(Message) 行: 99 Looper.loop() 行: 176 ActivityThread.main(String[]) 行: 5317
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) 行: 利用不可 [ネイティブメソッド] Method.invoke(Object, Object...) 行: 511 ZygoteInit$MethodAndArgsCaller.run( ) 行: 1102 ZygoteInit.main(String[]) 行: 869 NativeStart.main(String[]) 行: 利用不可 [ネイティブメソッド]

... アプリでいくつかのアクティビティを起動し、それらはすべて try/catch でラップされていますが、catch ブロックにブレークポイントを設定するとヒットしません。また、アクティビティを起動するコードをステップ オーバーすると、何も表示されません。間違っています。また、システムは、例外を示す Logcat に何も書き込んでいません (Logcat にフィルターがなく、完全な詳細出力)。

上記の行をクリックすると、「ソースが見つかりません」というメッセージが表示されます。開始しようとしているアクティビティや例外の性質を確認する方法はありますか?

4

7 に答える 7

6

まず第一に、try/catch は防弾アプリケーションを取得するための最良の方法ではありません。通常、このようなブロックの数が多いということは、作成者がエラーをクローキングしていることを意味します。

おそらく、システムメソッドに間違った引数を渡したか、プラットフォーム固有のエラーが発生した可能性があります。あなたのlogcatだけに基づいてその方法が何であるかは言えません。

バグを見つける方法は?おそらく最も効果的な方法は、このエラーが再度発生する限り、いくつかのログ メッセージ/ブレークポイントを設定し、1 行ずつデバッグすることです。その後、必要に応じて詳細をここに戻してください。

于 2015-08-03T17:14:37.433 に答える
1

バージョン4.2.2は正しいですか?ActivityThread.javaのAOSP コードで4.2.2は、すべてのタグの 2255 行にコメント以外は表示されません。他に何もすることがないので、私がこのような状況に陥った場合、AOSP コードに飛び込んで、どこで問題が発生しているかの手がかりが得られるかどうかを確認します。

于 2015-08-03T17:22:52.950 に答える
1

私の経験では、クラッシュの原因となっているコードを見つける際に同様の問題に直面したことがあります。そのような場合に私が一般的に行うことは次のとおりです。

  1. ログ バッファのサイズを大きくする- Logcat であまりにも多くのことが発生し、探しているスタック トレースがすでにクリアされている場合があります。(Android Studioの場合は少し異なります)
  2. アプリ名を使用してフィルターを適用する- これにより、他のアプリからのログの混乱がすべて削除されます。それでも問題が解決しない場合は、[フィルターなし] に戻して、手順 3 に進みます。
  3. 「Shutting down」または「Thread exiting」を検索します。クラッシュ シナリオでは、これらの単語の周りに根本原因が表示されます。
  4. ブレークポイントを使用して問題のあるコードを絞り込みます。これを行うには多くの方法がありますが、私は「主要なイベント」(OnCreate、Service、Calls、Catch Exception など) にブレークポイントを設定し、決して到達しない主要なイベントが見つかるまでそれぞれを実行することを好みますが、なれ。次に、ブレークポイントを毎回少しずつ調整して、さらに絞り込みます。
  5. 近くの Threads/Runnables には特別な注意を払ってください。これらは謎のエラー (無限ループ、デッドロックなど) の原因であることが多いためです。必要に応じて run() メソッドの各行にブレークポイントを配置し、ハング/失敗する場所を確認します。
于 2015-08-03T18:04:08.210 に答える
1

IDE のデバッガーをデバッグ モードで実行してみてください。通常、例外をキャッチします。それぞれのスレッドで何が起こっているかを確認するには、別のスレッドをクリックする必要がある場合があります。

于 2015-08-01T02:38:54.300 に答える
1

のコード ブロックは何onCreate()ですかActivityClientRecord?

  1. いくつかのブレークポイントを設定する必要があります。最初に呼び出しの場所で、startActivity()次にターゲット アクティビティの onCreate() の最初のステートメントで。次に、ステートメントごとに行って、正確な原因を見つける必要があります。

それでも問題点が見つからない場合は、ラップをキャッチErrorせずに、何か役立つ情報があればお知らせください。ExceptionstartActivity()

于 2015-08-03T17:27:53.913 に答える