Android 打印調用棧的方法


1.Java層調用棧打印:

(1)打印本地調用堆棧

Log.i(TAG,  Log.getStackTraceString(new Throwable())); //打印本地調用堆棧

(2)打印遠程調用堆棧

import android.os.Binder;
import android.app.IActivityManager;
import android.util.Log;


String processName = ""; int pid = Binder.getCallingPid(); //打印遠程調用棧 //ActivityManager activityManager = (ActivityManager) ServiceManager.getService(Context.ACTIVITY_SERVICE); try { final IActivityManager am = ActivityManager.getService(); if (am != null) { List<ActivityManager.RunningAppProcessInfo> list = am.getRunningAppProcesses(); for (ActivityManager.RunningAppProcessInfo info : list) { if (info.pid == pid) { processName = info.processName; //打印調用接口的進程名 break; } } } } catch (RemoteException e) { Log.i(TAG, "peace error in getService", e); }

 

2.C層調用棧打印方法

#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
/*
u8TraceSize : the size of backtrace you want to dump
*/
void FPP_PrintTrace (int u8TraceSize)
{
  void *btArray[u8TraceSize];
  size_t btSize;
  char **strings;
  size_t i;
  btSize = backtrace (btArray, u8TraceSize);
  strings = backtrace_symbols (btArray, btSize);
  printf ("SetVideoMute begin\n");
  for (i = 0; i < btSize; i++)
  {
    printf ("SetVideoMute #%d:%s\n", i,strings[i]);
  }
  printf ("SetVideoMute end\n");
  free (strings);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM