ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2012年10月31日 星期三

print current stack backtrace -- android

在 trace android framework 時,常常迷失掉。
可以在 framwork source 中,加入 dumpStack( ),這樣就可以找出 caller..

舉例來說,想知道 短按 power button 時,system suspend 的動作是誰 call 的。
只知道最後 作 setScreenState( ) 是實際寫入 kernel interface 的 function。

所以在 PowerManagerService.javasetScreenStateLocked() 加入: import java.lang.Thread; .... Thread.currentThread().dumpStack();
然後suspend 時,logcat 就會有: /System.err( 2417): java.lang.Throwable: stack request_suspend_state: mem (0->3) at 98046449377 (1970-01-02 00:26:25.141454751 UTC) dump W/System.err( 2417): at java.lang.Thread.dumpStack(Thread.java:577) W/System.err( 2417): at com.android.server.PowerManagerService.setScreenStateLocked(PowerManagerService.java:1629) W/System.err( 2417): at com.android.server.PowerManagerService.screenOffFinishedAnimatingLocked(PowerManagerService.java:1817) W/System.err( 2417): at com.android.server.PowerManagerService.access$4300(PowerManagerService.java:82) W/System.err( 2417): at com.android.server.PowerManagerService$BrightnessState.finishAnimationLocked(PowerManagerService.java:2079) W/System.err( 2417): at com.android.server.PowerManagerService$BrightnessState.stepLocked(PowerManagerService.java:2062) W/System.err( 2417): at com.android.server.PowerManagerService$BrightnessState.run(PowerManagerService.java:2088) W/System.err( 2417): at android.os.Handler.handleCallback(Handler.java:587) W/System.err( 2417): at android.os.Handler.dispatchMessage(Handler.java:92) W/System.err( 2417): at android.os.Looper.loop(Looper.java:130) W/System.err( 2417): at android.os.HandlerThread.run(HandlerThread.java:60) I/PowerManagerService( 2417): setScreenStateLocked0
這樣就知道,是



ref : java: printing current backtrace

沒有留言:

標籤

網誌存檔