SlideShare una empresa de Scribd logo
1 de 17
横浜 Android プラットフォーム部
                 第 27 回勉強会



Android のデバッグ小ネタ


                  2012/12/22
                     @l_b__
リブートバグ
●
    端末のリブート、困りますよね
●
    リブートの原因は HW のこともあるけれど、
     大抵 SW
●
    SW 要因の場合、大きな原因は 2 つでした
リブート要因
●
    フレームワーク部分処理で無限ループ / デッ
     ドロックで処理が止まり、 Watchdog から
     リブート
●
    Init で起動される System 権限のサーバ類が例
      外で落ちてリブート
Watchdog からリブート
●
    どこで処理が止まっているかを探しましょう
●
    ANR を出していることが多いので、その辺り
     の時刻のログを取得
●
    bugreport を出力してチェック
bugreport
●
    端末内の様々な状態をまとめて取得するコマンド
●
    # adb bugreport で標準出力に出力される
      –   リダイレクトしてファイルに保存しましょう
●
    内部処理として、 dumpstate サービスに接続して、情
     報を取得
●
    JelleyBean ではソースは
      –   bugreport   frameworks/base/cmds/bugreport
      –   dumpstate   frameworks/native/cmds/dumpstate
bugreport はどんな情報が ?
●
    カーネルから取得した CPU やメモリの情報
●
    ログ (main/events/system/radio) を一通り
●
    ANR のトレース
●
    ネットワークの情報
●
    システム設定 DB の内容
●
    システムプロパティ
●
    ファイルシステムの状態
●
    パッケージの情報
●
    Binder の情報
●
    Framework サービスの情報
●
    実行中アプリのアクティビティ、サービス、プロバイダの情報
問題箇所を探すには ?
●
    VM TRACES JUST NOW の箇所を確認しま
     しょう
●
    Bugreport 実行時や ANR 発生した時の VM ス
     タックトレースを出力
●
    問題が発生していた時の実行メソッドを特定
     できる
VM TRACES JUST NOW
●
    ------ VM TRACES JUST NOW (/data/anr/traces.txt.bugreport: 2012-08-26 06:35:25) ------
●
    ----- pid 124 at 2012-08-26 06:35:23 -----
●
    Cmd line: /system/bin/surfaceflinger
●
    "surfaceflinger" sysTid=124
●
     #00 pc 0000cb60 /system/lib/libc.so (__ioctl+8)
●
     #01 pc 00027f95 /system/lib/libc.so (ioctl+16)
●
     #02 pc 00016bfd /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)
       +124)
●
     #03 pc 000173af /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)
       +154)
●
     #04 pc 000007ed /system/bin/surfaceflinger
VM TRACES JUST NOW
●
    ----- pid 25855 at 2012-08-26 06:35:25 -----

●
    Cmd line: jp.r246.twicca

●
    "AsyncTask #5" prio=5 tid=15 WAIT

●
     | group="main" sCount=1 dsCount=0 obj=0x41d56710 self=0x662a45e0

●
     | sysTid=25883 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1714047536

●
     | schedstat=( 686456000 421807000 1632 ) utm=58 stm=10 core=0


●
     at java.lang.Object.wait(Native Method)

●
     - waiting on <0x41d44670> (a java.lang.VMThread) held by tid=15 (AsyncTask #5)

●
     at java.lang.Thread.parkFor(Thread.java:1231)

●
     at sun.misc.Unsafe.park(Unsafe.java:323)

●
     at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)

●
     at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2022)

●
     at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413)

●
     at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1009)

●
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1069)

●
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)

●
     at java.lang.Thread.run(Thread.java:856)
問題箇所を探すには ?
●
    赤丸の箇所がダンプ取得時のプロセスが実行
     していたメソッド
●
    想定される処理待ち以外で止まっているプロ
     セスがないかをチェック
例外でリブート
●
    logcat で例外発生時のスタックトレースを確
      認
●
    Java の場合は素直にスタックトレースを見れ
      ば大体分かります
●
    Native の場合は ...
Native Stacktrace の例
●
    *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

●
    Build fingerprint: ‘generic/myboard_xxx/xxx/myplatform:2.1/ERD79/eng.arunks.20100726.14330

●
    8:eng/test-keys’

●
    pid: 1138, tid: 1138 >>> /system/bin/bluetoothd <<<

●
    signal 11 (SIGSEGV), fault addr deadbaad

●
    r0 00000000 r1 afe13369 r2 00000027 r3 00000054

●
    r4 afe3ae08 r5 00000000 r6 00000000 r7 0000a000

●
    r8 00000000 r9 00000000 10 00000000 fp 00000000

●
    ip 00002ed8 sp bec782d8 lr deadbaad pc afe10a20 cpsr 60000030

●
    #00 pc 00010a20 /system/lib/libc.so

●
    #01 pc 0000b332 /system/lib/libc.so

●
    #02 pc 0000ca62 /system/lib/bluez-plugin/audio.so

●
    #03 pc 0000d1ce /system/lib/bluez-plugin/audio.so

●
    #04 pc 0000e0ba /system/lib/bluez-plugin/audio.so
Native Stacktrace の例
●
    #05 pc 0002f9a2 /system/lib/libbluetoothd.so

●
    #06 pc 00026806 /system/lib/libbluetoothd.so

●
    #07 pc 00026986 /system/lib/libbluetoothd.so

●
    #08 pc 0002800c /system/lib/libbluetoothd.so

●
    #09 pc 00028b72 /system/lib/libbluetoothd.so

●
    #10 pc 0001891a /system/lib/libbluetoothd.so

●
    #11 pc 0000c228 /system/lib/libc.so

●
    code around pc:

●
    afe10a10 f8442001 4798000c e054f8df 26002227

●
    afe10a20 2000f88e ef2cf7fb f7fd2106 f04fe80a

●
    afe10a30 91035180 460aa901 96012006 f7fc9602

●
    code around lr:

●
    ...
発生箇所を特定する
●
    #00 pc 00010a20 /system/lib/libc.so
    の箇所から、 libc.so の 0x00010a20 にて
     signal 11 (SIGSEGV), fault addr deadbaad
    が発生していることが分かります
発生箇所を特定する
●
    addr2line でどの関数で発生しているかを
     チェック
●
    JellyBean の場合、
      –   prebuilts/gcc/linux-x86/arm/arm-eabi-
           4.6/bin/arm-eabi-addr2line
発生箇所を特定する
●
    arm-eabi-addr2line -f -e (path to libc.so)
      0x00010a20
●
    これで発生関数が特定できます
●
    out/target/product/(Board name)/symbols 以
     下のデバッグシンボル付きライブラリを指
     定すれば発生行まで特定できます
●
    後はスタックを上にたどれば作成した箇所の
     どこで問題が発生しているか特定できます
まとめ
●
    ログが取れれば以上の方法で原因追跡できま
     す
●
    大体リブートバグの 9 割くらいはこれで追え
     るかな
●
    一番難しいのはバグを再現してログを取るこ
     とです


                        以上

Más contenido relacionado

La actualidad más candente

ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!Mr. Vengineer
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎ken_kitahara
 
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組みDeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組みToshiharu Sugiyama
 
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)Takahiro Harada
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)Kuniyasu Suzaki
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]DeNA
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステムl_b__
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~モノビット エンジン
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in AndroidOpersys inc.
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点Kuniyasu Suzaki
 
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
OpenStackを使用したGPU仮想化IaaS環境 事例紹介OpenStackを使用したGPU仮想化IaaS環境 事例紹介
OpenStackを使用したGPU仮想化IaaS環境 事例紹介VirtualTech Japan Inc.
 
いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる
いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみるいまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる
いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる裕士 常田
 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debugginglibfetion
 
基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroiddemuyan
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法モノビット エンジン
 

La actualidad más candente (20)

ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
 
淺談探索 Linux 系統設計之道
淺談探索 Linux 系統設計之道 淺談探索 Linux 系統設計之道
淺談探索 Linux 系統設計之道
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
 
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組みDeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
 
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in Android
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点
 
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
OpenStackを使用したGPU仮想化IaaS環境 事例紹介OpenStackを使用したGPU仮想化IaaS環境 事例紹介
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
 
いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる
いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみるいまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる
いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる
 
暗認本読書会4
暗認本読書会4暗認本読書会4
暗認本読書会4
 
AndroidとSELinux
AndroidとSELinuxAndroidとSELinux
AndroidとSELinux
 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debugging
 
基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid
 
Learn C Programming Language by Using GDB
Learn C Programming Language by Using GDBLearn C Programming Language by Using GDB
Learn C Programming Language by Using GDB
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 

Destacado

(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundleYusuke HIDESHIMA
 
Android,Brillo,ChromeOS
Android,Brillo,ChromeOSAndroid,Brillo,ChromeOS
Android,Brillo,ChromeOSl_b__
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門l_b__
 
Yapf2013
Yapf2013Yapf2013
Yapf2013l_b__
 
Open binder
Open binderOpen binder
Open binderl_b__
 
Eclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグEclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグl_b__
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)l_b__
 
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介l_b__
 
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達l_b__
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門l_b__
 
Binderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroidBinderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroidl_b__
 
Intentの概要
Intentの概要Intentの概要
Intentの概要l_b__
 
20150909 日本androidの会9月定例講演資料
20150909 日本androidの会9月定例講演資料20150909 日本androidの会9月定例講演資料
20150909 日本androidの会9月定例講演資料ak_shio_555
 
Interactive UI with UniRx
Interactive UI with UniRxInteractive UI with UniRx
Interactive UI with UniRxYuto Iwashita
 
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜Toru Nayuki
 
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発Hirohito Morinaga
 
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービスUNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービスMakotoItoh
 
ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?Tetsuyuki Kobayashi
 
Unity scene file collaboration
Unity scene file collaborationUnity scene file collaboration
Unity scene file collaborationNoam Gat
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてTatsuhiko Yamamura
 

Destacado (20)

(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
(Unityよくわかってない人のための)なんとなくわかるかもしれないAssetBundle
 
Android,Brillo,ChromeOS
Android,Brillo,ChromeOSAndroid,Brillo,ChromeOS
Android,Brillo,ChromeOS
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
Yapf2013
Yapf2013Yapf2013
Yapf2013
 
Open binder
Open binderOpen binder
Open binder
 
Eclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグEclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグ
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介
 
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
Binderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroidBinderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroid
 
Intentの概要
Intentの概要Intentの概要
Intentの概要
 
20150909 日本androidの会9月定例講演資料
20150909 日本androidの会9月定例講演資料20150909 日本androidの会9月定例講演資料
20150909 日本androidの会9月定例講演資料
 
Interactive UI with UniRx
Interactive UI with UniRxInteractive UI with UniRx
Interactive UI with UniRx
 
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
 
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
 
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービスUNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
 
ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?ADB(Android Debug Bridge): How it works?
ADB(Android Debug Bridge): How it works?
 
Unity scene file collaboration
Unity scene file collaborationUnity scene file collaboration
Unity scene file collaboration
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
 

Similar a Android デバッグ小ネタ

Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツールYasumasa Suenaga
 
PF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGPF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGdaye001
 
Osc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamagutiOsc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamagutiNoriyuki Yamaguchi
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりYuya Rin
 
Docker調査20150704
Docker調査20150704Docker調査20150704
Docker調査20150704HommasSlide
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件yaegashi
 
RouterBOARD with OpenFlow
RouterBOARD with OpenFlowRouterBOARD with OpenFlow
RouterBOARD with OpenFlowToshiki Tsuboi
 
もしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらもしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらTakuma Nakajima
 
Chromeが落ちる問題を 追いかけていたら libgcryptのbugに出会った
Chromeが落ちる問題を 追いかけていたら libgcryptのbugに出会ったChromeが落ちる問題を 追いかけていたら libgcryptのbugに出会った
Chromeが落ちる問題を 追いかけていたら libgcryptのbugに出会ったMitsutoshi Nakano
 
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介IBM Analytics Japan
 
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Takuya Matsunaga
 
Getting Started with Jetson Nano
Getting Started with Jetson NanoGetting Started with Jetson Nano
Getting Started with Jetson NanoNVIDIA Japan
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみたy-uti
 
Ns2240series users manual_07
Ns2240series users manual_07Ns2240series users manual_07
Ns2240series users manual_07squat12
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 

Similar a Android デバッグ小ネタ (20)

Gingerbread
GingerbreadGingerbread
Gingerbread
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
Let's play with Goldfish
Let's play with GoldfishLet's play with Goldfish
Let's play with Goldfish
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
 
PF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGPF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAG
 
Osc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamagutiOsc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamaguti
 
about DakotagUI
about DakotagUIabout DakotagUI
about DakotagUI
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 
Docker調査20150704
Docker調査20150704Docker調査20150704
Docker調査20150704
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
 
RouterBOARD with OpenFlow
RouterBOARD with OpenFlowRouterBOARD with OpenFlow
RouterBOARD with OpenFlow
 
もしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらもしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったら
 
Chromeが落ちる問題を 追いかけていたら libgcryptのbugに出会った
Chromeが落ちる問題を 追いかけていたら libgcryptのbugに出会ったChromeが落ちる問題を 追いかけていたら libgcryptのbugに出会った
Chromeが落ちる問題を 追いかけていたら libgcryptのbugに出会った
 
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
 
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
 
Getting Started with Jetson Nano
Getting Started with Jetson NanoGetting Started with Jetson Nano
Getting Started with Jetson Nano
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
Ns2240series users manual_07
Ns2240series users manual_07Ns2240series users manual_07
Ns2240series users manual_07
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 

Android デバッグ小ネタ

  • 1. 横浜 Android プラットフォーム部 第 27 回勉強会 Android のデバッグ小ネタ 2012/12/22 @l_b__
  • 2. リブートバグ ● 端末のリブート、困りますよね ● リブートの原因は HW のこともあるけれど、 大抵 SW ● SW 要因の場合、大きな原因は 2 つでした
  • 3. リブート要因 ● フレームワーク部分処理で無限ループ / デッ ドロックで処理が止まり、 Watchdog から リブート ● Init で起動される System 権限のサーバ類が例 外で落ちてリブート
  • 4. Watchdog からリブート ● どこで処理が止まっているかを探しましょう ● ANR を出していることが多いので、その辺り の時刻のログを取得 ● bugreport を出力してチェック
  • 5. bugreport ● 端末内の様々な状態をまとめて取得するコマンド ● # adb bugreport で標準出力に出力される – リダイレクトしてファイルに保存しましょう ● 内部処理として、 dumpstate サービスに接続して、情 報を取得 ● JelleyBean ではソースは – bugreport   frameworks/base/cmds/bugreport – dumpstate   frameworks/native/cmds/dumpstate
  • 6. bugreport はどんな情報が ? ● カーネルから取得した CPU やメモリの情報 ● ログ (main/events/system/radio) を一通り ● ANR のトレース ● ネットワークの情報 ● システム設定 DB の内容 ● システムプロパティ ● ファイルシステムの状態 ● パッケージの情報 ● Binder の情報 ● Framework サービスの情報 ● 実行中アプリのアクティビティ、サービス、プロバイダの情報
  • 7. 問題箇所を探すには ? ● VM TRACES JUST NOW の箇所を確認しま しょう ● Bugreport 実行時や ANR 発生した時の VM ス タックトレースを出力 ● 問題が発生していた時の実行メソッドを特定 できる
  • 8. VM TRACES JUST NOW ● ------ VM TRACES JUST NOW (/data/anr/traces.txt.bugreport: 2012-08-26 06:35:25) ------ ● ----- pid 124 at 2012-08-26 06:35:23 ----- ● Cmd line: /system/bin/surfaceflinger ● "surfaceflinger" sysTid=124 ● #00 pc 0000cb60 /system/lib/libc.so (__ioctl+8) ● #01 pc 00027f95 /system/lib/libc.so (ioctl+16) ● #02 pc 00016bfd /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool) +124) ● #03 pc 000173af /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool) +154) ● #04 pc 000007ed /system/bin/surfaceflinger
  • 9. VM TRACES JUST NOW ● ----- pid 25855 at 2012-08-26 06:35:25 ----- ● Cmd line: jp.r246.twicca ● "AsyncTask #5" prio=5 tid=15 WAIT ● | group="main" sCount=1 dsCount=0 obj=0x41d56710 self=0x662a45e0 ● | sysTid=25883 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1714047536 ● | schedstat=( 686456000 421807000 1632 ) utm=58 stm=10 core=0 ● at java.lang.Object.wait(Native Method) ● - waiting on <0x41d44670> (a java.lang.VMThread) held by tid=15 (AsyncTask #5) ● at java.lang.Thread.parkFor(Thread.java:1231) ● at sun.misc.Unsafe.park(Unsafe.java:323) ● at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157) ● at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2022) ● at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:413) ● at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1009) ● at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1069) ● at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) ● at java.lang.Thread.run(Thread.java:856)
  • 10. 問題箇所を探すには ? ● 赤丸の箇所がダンプ取得時のプロセスが実行 していたメソッド ● 想定される処理待ち以外で止まっているプロ セスがないかをチェック
  • 11. 例外でリブート ● logcat で例外発生時のスタックトレースを確 認 ● Java の場合は素直にスタックトレースを見れ ば大体分かります ● Native の場合は ...
  • 12. Native Stacktrace の例 ● *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ● Build fingerprint: ‘generic/myboard_xxx/xxx/myplatform:2.1/ERD79/eng.arunks.20100726.14330 ● 8:eng/test-keys’ ● pid: 1138, tid: 1138 >>> /system/bin/bluetoothd <<< ● signal 11 (SIGSEGV), fault addr deadbaad ● r0 00000000 r1 afe13369 r2 00000027 r3 00000054 ● r4 afe3ae08 r5 00000000 r6 00000000 r7 0000a000 ● r8 00000000 r9 00000000 10 00000000 fp 00000000 ● ip 00002ed8 sp bec782d8 lr deadbaad pc afe10a20 cpsr 60000030 ● #00 pc 00010a20 /system/lib/libc.so ● #01 pc 0000b332 /system/lib/libc.so ● #02 pc 0000ca62 /system/lib/bluez-plugin/audio.so ● #03 pc 0000d1ce /system/lib/bluez-plugin/audio.so ● #04 pc 0000e0ba /system/lib/bluez-plugin/audio.so
  • 13. Native Stacktrace の例 ● #05 pc 0002f9a2 /system/lib/libbluetoothd.so ● #06 pc 00026806 /system/lib/libbluetoothd.so ● #07 pc 00026986 /system/lib/libbluetoothd.so ● #08 pc 0002800c /system/lib/libbluetoothd.so ● #09 pc 00028b72 /system/lib/libbluetoothd.so ● #10 pc 0001891a /system/lib/libbluetoothd.so ● #11 pc 0000c228 /system/lib/libc.so ● code around pc: ● afe10a10 f8442001 4798000c e054f8df 26002227 ● afe10a20 2000f88e ef2cf7fb f7fd2106 f04fe80a ● afe10a30 91035180 460aa901 96012006 f7fc9602 ● code around lr: ● ...
  • 14. 発生箇所を特定する ● #00 pc 00010a20 /system/lib/libc.so の箇所から、 libc.so の 0x00010a20 にて signal 11 (SIGSEGV), fault addr deadbaad が発生していることが分かります
  • 15. 発生箇所を特定する ● addr2line でどの関数で発生しているかを チェック ● JellyBean の場合、 – prebuilts/gcc/linux-x86/arm/arm-eabi- 4.6/bin/arm-eabi-addr2line
  • 16. 発生箇所を特定する ● arm-eabi-addr2line -f -e (path to libc.so) 0x00010a20 ● これで発生関数が特定できます ● out/target/product/(Board name)/symbols 以 下のデバッグシンボル付きライブラリを指 定すれば発生行まで特定できます ● 後はスタックを上にたどれば作成した箇所の どこで問題が発生しているか特定できます
  • 17. まとめ ● ログが取れれば以上の方法で原因追跡できま す ● 大体リブートバグの 9 割くらいはこれで追え るかな ● 一番難しいのはバグを再現してログを取るこ とです 以上