Android 打印堆栈日志的几种方法

2023-05-16

在Android调试过程中经常会出现程序出现的结果不是我们预期的结果,那就需要加Log打印调试,看调用过程是否正确,此时就需要打印程序的调用栈,特别是Android代码相当庞大,打印堆栈更有利于我们分析问题,下面就记录下平时用到不退出程序打印堆栈的方法。

验证的方法相关简单,在Activity的类中创建一个方法ThrowException,在onCreate中调用此方法,看打印出什么

public void ThrowException() {
        // 调试打印堆栈而不退出
        Log.d(TAG, Log.getStackTraceString(new Throwable()));
 
        // 创建异常打印堆栈
        Exception e = new Exception("this is a log");
        e.printStackTrace();
 
        // 获取当前线程的堆栈
        for (StackTraceElement i : Thread.currentThread().getStackTrace()) {
            Log.i(TAG, i.toString());
        }
 
        RuntimeException re = new RuntimeException();
        re.fillInStackTrace();
        Log.i(TAG, "stackTrace", re);
 
        // 主动抛出异常调试
        try {
            Log.i(TAG,
                    "--------------------------------NullPointerException-----------1");
            throw new NullPointerException();
        } catch (NullPointerException e1) {
            // TODO: handle exception
            Log.i(TAG, "--------------------------------NullPointerException");
            Log.e(TAG, Log.getStackTraceString(e1));
            // e1.printStackTrace();
        }
        Log.i(TAG,
                "--------------------------------NullPointerException-----------end");
    }


1、Log.d(TAG, Log.getStackTraceString(new Throwable()));

04-09 14:19:51.764 D/dzt_test(26317): java.lang.Throwable
04-09 14:19:51.764 D/dzt_test(26317):     at com.dzt.testapp.MainActivity.ThrowException(MainActivity.java:69)
04-09 14:19:51.764 D/dzt_test(26317):     at com.dzt.testapp.MainActivity.onCreate(MainActivity.java:63)
04-09 14:19:51.764 D/dzt_test(26317):     at android.app.Activity.performCreate(Activity.java:5343)
04-09 14:19:51.764 D/dzt_test(26317):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
04-09 14:19:51.764 D/dzt_test(26317):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
04-09 14:19:51.764 D/dzt_test(26317):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
04-09 14:19:51.764 D/dzt_test(26317):     at android.app.ActivityThread.access$800(ActivityThread.java:151)
04-09 14:19:51.764 D/dzt_test(26317):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
04-09 14:19:51.764 D/dzt_test(26317):     at android.os.Handler.dispatchMessage(Handler.java:110)
04-09 14:19:51.764 D/dzt_test(26317):     at android.os.Looper.loop(Looper.java:193)
04-09 14:19:51.764 D/dzt_test(26317):     at android.app.ActivityThread.main(ActivityThread.java:5333)
04-09 14:19:51.764 D/dzt_test(26317):     at java.lang.reflect.Method.invokeNative(Native Method)
04-09 14:19:51.764 D/dzt_test(26317):     at java.lang.reflect.Method.invoke(Method.java:515)
04-09 14:19:51.764 D/dzt_test(26317):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830)
04-09 14:19:51.764 D/dzt_test(26317):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646)
04-09 14:19:51.764 D/dzt_test(26317):     at dalvik.system.NativeStart.main(Native Method)


2、
Exception e = new Exception("this is a log");
        e.printStackTrace();

04-09 14:19:51.764 W/System.err(26317): java.lang.Exception: this is a log
04-09 14:19:51.765 W/System.err(26317):     at com.dzt.testapp.MainActivity.ThrowException(MainActivity.java:72)
04-09 14:19:51.765 W/System.err(26317):     at com.dzt.testapp.MainActivity.onCreate(MainActivity.java:63)
04-09 14:19:51.765 W/System.err(26317):     at android.app.Activity.performCreate(Activity.java:5343)
04-09 14:19:51.765 W/System.err(26317):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
04-09 14:19:51.765 W/System.err(26317):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
04-09 14:19:51.766 W/System.err(26317):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
04-09 14:19:51.766 W/System.err(26317):     at android.app.ActivityThread.access$800(ActivityThread.java:151)
04-09 14:19:51.766 W/System.err(26317):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
04-09 14:19:51.766 W/System.err(26317):     at android.os.Handler.dispatchMessage(Handler.java:110)
04-09 14:19:51.766 W/System.err(26317):     at android.os.Looper.loop(Looper.java:193)
04-09 14:19:51.766 W/System.err(26317):     at android.app.ActivityThread.main(ActivityThread.java:5333)
04-09 14:19:51.766 W/System.err(26317):     at java.lang.reflect.Method.invokeNative(Native Method)
04-09 14:19:51.766 W/System.err(26317):     at java.lang.reflect.Method.invoke(Method.java:515)
04-09 14:19:51.766 W/System.err(26317):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830)
04-09 14:19:51.766 W/System.err(26317):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646)
04-09 14:19:51.767 W/System.err(26317):     at dalvik.system.NativeStart.main(Native Method)


3、
// 获取当前线程的堆栈
        for (StackTraceElement i : Thread.currentThread().getStackTrace()) {
            Log.i(TAG, i.toString());
        }

04-09 14:19:51.767 I/dzt_test(26317): dalvik.system.VMStack.getThreadStackTrace(Native Method)
04-09 14:19:51.768 I/dzt_test(26317): java.lang.Thread.getStackTrace(Thread.java:579)
04-09 14:19:51.768 I/dzt_test(26317): com.dzt.testapp.MainActivity.ThrowException(MainActivity.java:76)
04-09 14:19:51.768 I/dzt_test(26317): com.dzt.testapp.MainActivity.onCreate(MainActivity.java:63)
04-09 14:19:51.768 I/dzt_test(26317): android.app.Activity.performCreate(Activity.java:5343)
04-09 14:19:51.769 I/dzt_test(26317): android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
04-09 14:19:51.769 I/dzt_test(26317): android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
04-09 14:19:51.769 I/dzt_test(26317): android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
04-09 14:19:51.769 I/dzt_test(26317): android.app.ActivityThread.access$800(ActivityThread.java:151)
04-09 14:19:51.770 I/dzt_test(26317): android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
04-09 14:19:51.770 I/dzt_test(26317): android.os.Handler.dispatchMessage(Handler.java:110)
04-09 14:19:51.770 I/dzt_test(26317): android.os.Looper.loop(Looper.java:193)
04-09 14:19:51.770 I/dzt_test(26317): android.app.ActivityThread.main(ActivityThread.java:5333)
04-09 14:19:51.771 I/dzt_test(26317): java.lang.reflect.Method.invokeNative(Native Method)
04-09 14:19:51.771 I/dzt_test(26317): java.lang.reflect.Method.invoke(Method.java:515)
04-09 14:19:51.771 I/dzt_test(26317): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830)
04-09 14:19:51.771 I/dzt_test(26317): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646)
04-09 14:19:51.771 I/dzt_test(26317): dalvik.system.NativeStart.main(Native Method)


4、
RuntimeException re = new RuntimeException();
        re.fillInStackTrace();
        Log.i(TAG, "stackTrace", re);

04-09 14:19:51.773 I/dzt_test(26317): stackTrace
04-09 14:19:51.773 I/dzt_test(26317): java.lang.RuntimeException
04-09 14:19:51.773 I/dzt_test(26317):     at com.dzt.testapp.MainActivity.ThrowException(MainActivity.java:81)
04-09 14:19:51.773 I/dzt_test(26317):     at com.dzt.testapp.MainActivity.onCreate(MainActivity.java:63)
04-09 14:19:51.773 I/dzt_test(26317):     at android.app.Activity.performCreate(Activity.java:5343)
04-09 14:19:51.773 I/dzt_test(26317):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
04-09 14:19:51.773 I/dzt_test(26317):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
04-09 14:19:51.773 I/dzt_test(26317):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
04-09 14:19:51.773 I/dzt_test(26317):     at android.app.ActivityThread.access$800(ActivityThread.java:151)
04-09 14:19:51.773 I/dzt_test(26317):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
04-09 14:19:51.773 I/dzt_test(26317):     at android.os.Handler.dispatchMessage(Handler.java:110)
04-09 14:19:51.773 I/dzt_test(26317):     at android.os.Looper.loop(Looper.java:193)
04-09 14:19:51.773 I/dzt_test(26317):     at android.app.ActivityThread.main(ActivityThread.java:5333)
04-09 14:19:51.773 I/dzt_test(26317):     at java.lang.reflect.Method.invokeNative(Native Method)
04-09 14:19:51.773 I/dzt_test(26317):     at java.lang.reflect.Method.invoke(Method.java:515)
04-09 14:19:51.773 I/dzt_test(26317):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830)
04-09 14:19:51.773 I/dzt_test(26317):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646)
04-09 14:19:51.773 I/dzt_test(26317):     at dalvik.system.NativeStart.main(Native Method)


5、
// 主动抛出异常调试
        try {
            Log.i(TAG,
                    "--------------------------------NullPointerException-----------1");
            throw new NullPointerException();
        } catch (NullPointerException e1) {
            // TODO: handle exception
            Log.i(TAG, "--------------------------------NullPointerException");
            Log.e(TAG, Log.getStackTraceString(e1));
            // e1.printStackTrace();
        }
        Log.i(TAG,
                "--------------------------------NullPointerException-----------end");

04-09 14:19:51.773 I/dzt_test(26317): --------------------------------NullPointerException-----------1
04-09 14:19:51.773 I/dzt_test(26317): --------------------------------NullPointerException
04-09 14:19:51.774 E/dzt_test(26317): java.lang.NullPointerException
04-09 14:19:51.774 E/dzt_test(26317):     at com.dzt.testapp.MainActivity.ThrowException(MainActivity.java:88)
04-09 14:19:51.774 E/dzt_test(26317):     at com.dzt.testapp.MainActivity.onCreate(MainActivity.java:63)
04-09 14:19:51.774 E/dzt_test(26317):     at android.app.Activity.performCreate(Activity.java:5343)
04-09 14:19:51.774 E/dzt_test(26317):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
04-09 14:19:51.774 E/dzt_test(26317):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
04-09 14:19:51.774 E/dzt_test(26317):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
04-09 14:19:51.774 E/dzt_test(26317):     at android.app.ActivityThread.access$800(ActivityThread.java:151)
04-09 14:19:51.774 E/dzt_test(26317):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
04-09 14:19:51.774 E/dzt_test(26317):     at android.os.Handler.dispatchMessage(Handler.java:110)
04-09 14:19:51.774 E/dzt_test(26317):     at android.os.Looper.loop(Looper.java:193)
04-09 14:19:51.774 E/dzt_test(26317):     at android.app.ActivityThread.main(ActivityThread.java:5333)
04-09 14:19:51.774 E/dzt_test(26317):     at java.lang.reflect.Method.invokeNative(Native Method)
04-09 14:19:51.774 E/dzt_test(26317):     at java.lang.reflect.Method.invoke(Method.java:515)
04-09 14:19:51.774 E/dzt_test(26317):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830)
04-09 14:19:51.774 E/dzt_test(26317):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646)
04-09 14:19:51.774 E/dzt_test(26317):     at dalvik.system.NativeStart.main(Native Method)
04-09 14:19:51.775 I/dzt_test(26317): --------------------------------NullPointerException-----------end


虽然以上方法不尽一样,但打印出来的堆栈是一样的。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 打印堆栈日志的几种方法 的相关文章

随机推荐

  • 将本地项目上传到远程Git服务器

    1 先进入项目文件夹 通过命令 git init 把这个目录变成git可以管理的仓库 git init 2 把文件添加到版本库中 xff0c 使用命令git add 添加到暂存区里面去 xff0c 小数点 34 34 意为添加文件夹下的所有
  • 解决Manifest merger failed : Attribute application@appComponentFactory

    在将butterknife升级到10 0 0的时候遇到问题 xff0c 编译无法通过 Manifest merger failed Attribute application 64 appComponentFactory value 61
  • bindService不能触发onServiceConnected方法的原因

    在android项目中用到AIDL xff0c bindService service connection BIND AUTO CREATE 之后一直不调用 connection中的onServiceConnected方法 可能原因1 1
  • Android应用被浅杀和深杀

    onTaskRemoved 方法在当用户移除应用的一个Task栈时被调用 也就是当用户在最近任务界面把该应用的一个task划掉时 xff0c 或者在最近任务界面进行清理时 这两种情况下onTaskRemoved 都会被调用 xff0c 但在
  • java.lang.OutOfMemoryError: Could not allocate JNI Env

    最近有一些OOM的错误上报 java lang OutOfMemoryError Could not allocate JNI Env 极少量的 java lang OutOfMemoryError pthread create 1040K
  • RecycleView4种定位滚动方式演示

    概述 相信大家在项目中使用RecyclerView时 xff0c 经常会遇到这样的需求 xff1a 将RecyclerView滑动到指定位置 xff0c 或者检索RecyclerView的某一项 xff08 各个项的高度不确定 xff09
  • Java/Android中的引用类型及WeakReference应用实践

    一 背景 一般意义上而言 xff0c Java Android中的引用类型包括强引用 软引用 弱引用 虚引用 不同的引用类型具有各自适用的应用场景 xff0c 并与JVM的GC直接相关 作为Java Android中的引用类型之一 xff0
  • Android 网络切换 发送多次广播问题

    最近发现做项目监听网络切换广播 xff0c 根据网络条件切换一些设置 测试发现每次3G WIFI 或者WIFI到3G xff0c 网络切换的广播都会发出多次 比如3G gt WIFI 会发送三个广播 1 连接wifi 2 关闭手机网络 3
  • 在draw.io中创建容器形状

    draw io中的任何形状都可以变成容器 包含其他多个形状的形状 在绘图区域上移动容器时 xff0c 位于其中的形状将随容器移动 容器可用于指示流程图中的步骤或子过程组 xff0c 数据集合 xff0c 树形图或任何其他具有层次结构的图中的
  • H264基础及RTP分包解包

    一 H 264基础概念 SODB 数据比特串 xff0d xff0d xff1e 最原始的编码数据 RBSP 原始字节序列载荷 xff0d xff0d xff1e 在SODB的后面填加了结尾比特 xff08 RBSP trailing bi
  • Mac App Store中的开发预览版软件更新如何关闭(如Safari 12.0 seed)

    这段时间莫名其妙App Store中出现Safari 12 0 seed开发预览版更新 xff0c 这个是针对开发者提供的 xff0c 作为普通用户 xff0c 不希望接触到这种bug不断的产品 xff0c 那么 xff0c 该如何关闭呢
  • 在VMware-player中安装 VMware Tools的步骤

    1 用root身份登录ubuntu后 xff0c player 管理 安装VMware Tools 3 把上述文件复制到 home 用户为名的文件夹中 例如本人把上述文件复制到 home tgl tglFile中了 4 xff09 首先我进
  • ubuntu18.04编译问题

    1 没有安装curl fantasy 64 fantasy All Series my dev android AOSP prebuilts sdk tools jack admin start server prebuilts sdk t
  • VMware 扩展Ubuntu虚拟机的磁盘空间

    1 准备工作 使用 df h 指令查看一下磁盘空间的使用情况 可以看到 xff0c 现在挂载的磁盘空间为40G xff0c 用了16G xff0c 还剩22G 下面开始扩展磁盘空间 2 编辑虚拟机设置 打开虚拟机 xff0c 找到待扩展的虚
  • 解决Android Studio 无法通过gradle 下载https://dl.google.com/android/repository/addons_list-3.xml 解决办法

    安卓gradle的时候 xff0c 会弹出来这样报错 Task prepareKotlinBuildScriptModel UP TO DATE IOException https dl google com android reposit
  • libGL error: MESA-LOADER: failed to open vmwgfx (search paths /usr/lib/x86_64-linux-gnu/dri)

    使用emulator use system libs 命令 Using the libstdc 43 43 so 6 that is available in your system instead of the one bundled w
  • Java内部类详解

    一 内部类基础 在Java中 xff0c 可以将一个类定义在另一个类里面或者一个方法里面 xff0c 这样的类称为内部类 广泛意义上的内部类一般来说包括这四种 xff1a 成员内部类 局部内部类 匿名内部类和静态内部类 下面就先来了解一下这
  • 使用Ubuntu18.04编译android8.1

    使用虚拟机中的Ubuntu18 04编译android8 1 1 软硬件要求 1 1 硬件 16G的内存 xff1b 200G的存储盘 1 2 软件 Ubuntu18 04 这样的软硬件要求并非必须 xff0c 但是经过测试这样的配置刚好能
  • Android 8 细分版本 分支 以及支持的设备

    Android 8 细分版本 分支 以及支持的设备 细分版本分支版本支持的设备OPM8 181005 003android 8 1 0 r48OreoPixel COPM7 181005 003android 8 1 0 r47OreoNe
  • Android 打印堆栈日志的几种方法

    在Android调试过程中经常会出现程序出现的结果不是我们预期的结果 xff0c 那就需要加Log打印调试 xff0c 看调用过程是否正确 xff0c 此时就需要打印程序的调用栈 xff0c 特别是Android代码相当庞大 xff0c 打