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); }