这里介绍Android框架层AM组件中函数调用关系打印。

具体点,想在frameworks/base/services/core/java/com/android/server/am/ProcessList.java killPackageProcessesLSP()中打印函数调用关系,可以用如下方法,

1.Throwable printStackTrace方法打印调用栈

//frameworks/base/services/core/java/com/android/server/am/ProcessList.java
boolean killPackageProcessesLSP(String packageName, int appId,
              int userId, int minOomAdj, boolean callerWillRestart,
              boolean allowRestart, boolean doit, boolean evenPersistent,
              boolean setRemoved, boolean uninstalling,
              int reasonCode, int subReason, String reason) {
{
    ...
    Slog.d(TAG, "=== AM StackTrace ===\n");
    new Throwable().printStackTrace();
    ...
}

2.Thread getStackTrace方法打印调用栈

//frameworks/base/services/core/java/com/android/server/am/ProcessList.java
boolean killPackageProcessesLSP(String packageName, int appId,
              int userId, int minOomAdj, boolean callerWillRestart,
              boolean allowRestart, boolean doit, boolean evenPersistent,
              boolean setRemoved, boolean uninstalling,
              int reasonCode, int subReason, String reason) {
{
    ...
    Slog.d(TAG, "=== AM StackTrace ===\n" + 
            Arrays.toString(Thread.currentThread().getStackTrace());
    ...
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐