エラーを特定するアドレス情報とaddr2lineにコマンドので、行数を使用してバックトレース

特定の機能を実現するLinuxの開発、基礎となる頻繁に使用される静的にリンクされたライブラリー(* .A)またはダイナミックリンクライブラリ(* .soという)。

アプリケーション層の呼び出しではファイルは、しばしば内部的な問題の現象が発生しますので、そのアプリケーションがクラッシュする原因となります。

クラッシュが発生した後、システムはログを生成します。次のように、実質的にログインします。

 

01 I/DEBUG(349): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
02 I/DEBUG(349): Build fingerprint:
03 'Android/jileniao.net/jileniao:5.0.1/LRX22G/root03231947:userdebug/test-keys'
04 I/DEBUG(349): Revision: '33696'
05 I/DEBUG(349): ABI: 'arm'
06 I/DEBUG(349): pid: 2686, tid: 3065, name: gps_proc  >>> /system/bin/gpsserver <<<
07 I/DEBUG(349): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xb170a219
08 W/NativeCrashListener(856): Couldn't find ProcessRecord for pid 2686
09 I/DEBUG(349):     r0 000fde18  r1 ae3f4248  r2 0007ef0c  r3 00008000
10 E/DEBUG(349): AM write failure (32 / Broken pipe) I/DEBUG(349):     r4 001fb799  r5 ffffa7e4  r6 ae4d00c0  r7 0001c5a2
11 I/DEBUG(349):     r8 00000081  r9 00000001  sl b160c400  fp 00000001
12 I/DEBUG(349):     ip ae4d00c0  sp af0bb8a0  lr b160c401  pc b5d08680  cpsr 280b0010
13 I/DEBUG(349): backtrace:
14 I/DEBUG(349):     #00 pc 0011d680  /system/lib/gps_ma87.so (Method0+984)
15 I/DEBUG(349):     #01 pc 0007694c  /system/lib/gps_ma87.so (Method1+724)
16 I/DEBUG(349):     #02 pc 00069c2c  /system/lib/gps_ma87.so (Method2+1116)
17 I/DEBUG(349):     #03 pc 000676f4  /system/lib/gps_ma87.so (Method3+224)
18 I/DEBUG(349):     #04 pc 00066bef  /system/lib/gps_ma87.so (GPSCPPClassName::Method4(char*, int)+390)
19 I/DEBUG(349):     #05 pc 000438bf  /system/lib/gps_ma87.so (gps::Method5(void)+134)
20 I/DEBUG(349):     #06 pc 00042fe1  /system/lib/gps_ma87.so (gps::Method6(void*)+40)
21 I/DEBUG(349):     #07 pc 00042429  /system/lib/gps_ma87.so (gps::Method7(void*)+172)
22 I/DEBUG(349):     #08 pc 000162e3  /system/lib/libc.so (__pthread_start(void*)+30)
23 I/DEBUG(349):     #09 pc 000142d3  /system/lib/libc.so (__start_thread+6)

 

ログを見た後、直接、最も有用なバックトレース情報へ。バックトレース等の関数呼び出しや他のアドレス情報との関係は、真の墜落現場を復元するように記述することができたときにクラッシュが発生して説明しています。そして、あなたはシーンの特定の状況を見ては、どのようにのようなものです。

情報の10行の合計に代わって#00から#09まででバックトレースは、後方方法#ラインの下から09通話ライン#08の方法を探して、関数呼び出し関係際にクラッシュであり、#08行のメソッド呼び出し#方法07行、最大で、最後のメソッド#00の列と呼ばれる#01ライン方式です。クラッシュは最終的に#00行です。

上記の方法を通して、私たちは、クラッシュが発生したときに、問題が何であるかを知っています。しかし、ある特定の方法は、問題のトラブルシューティングに、我々はまた、より詳細な結果を得ることを期待、やや広義のままです。

バックトレース情報では、バック00#09に記さXXX +単語が各行ごとに#方法があり、私は、これは行番号があることを理解することが第一です。しかし、バックソースコードにではなく、そのように見られます。

正確な行数を知るには、アドレスの各行の後ろにPCを使用する必要があります。

Linuxは、私たちのためにaddr2lineに順序を提供します。行番号は、addressコマンドによって得ることができます。

特定の使用addr2lineにコマンドを見てください。

ここでは、目的関数と行番号の外観を実現するための2つのオプションを指定します。

 

  • バック一緒に-Eので、ファイル名
  • -f出力関数名中

 

例:addr2lineに-eテストgps_ma87.so 0x0011d680 -f

この方法では、関数名とそのファイルの行の特定の番号を取得することができます。

addr2lineに得られた行番号は、エラーを決定することは不可能です

あなたが取得したソースコードaddr2lineにコマンドを対応する行番号を使用している場合で、非常に単純な代入文などAの状況、である、私たちは非常に確認することはできませんどのようなコードエラーの例外が発生し、このライン。方法が間違っているかどうかに依存と呼ばれるこの場所では、間違ったアプローチで、最も可能性の高い場所を呼び出し、そのシステムは、この行に検索するための時間を与えられています。

addr2lineにGET行数??:?か??:理由0

?それとも??:あなたはaddr2lineにGET ??が発生した場合は0を、ファイルがシンボルテーブル(シンボリック)の情報に付属しておりませんので、その理由は、getをコンパイルしています。

アンドロイド、アンドロイドビルド環境でのソース環境が自動的に生成された場合はそうのシンボルテーブル(シンボリック)に付属のマニュアルがあります。標準android5.0では、シンボルテーブル(シンボリック)次のパスにあるファイルそうを伴います:

アウト/標的/製品/ [PRODUCTNAME] /シンボル/システム/ LIB / ****。そう

http://tldp.org/HOWTO/Program:非アンドロイド環境ならば、必要性等のダイナミックリンクライブラリとシンボルテーブルに関して、と特にそうMakefileを生成し、指定文書のオプションシンボルテーブル(シンボリック)が付属して、以下のWebサイトを参照してください-Library-HOWTO /共有libraries.html

彼は195元記事に公開 ウォン称賛53 ビュー530 000 +を

おすすめ

転載: blog.csdn.net/u012587637/article/details/104297995