zoukankan      html  css  js  c++  java
  • 实时打印stack trace, 免得使用gdb了.

    实现文件:
    PrintStackTrace.java
    "
    package com.android.providers.downloads;

    import android.util.Log;

    public class PrintStackTrace { 
    //Invoke the static method where you want to print a stack trace 
    public static void printStackTrace(Class cls) { 
            StackTraceElement[] elements = (new Throwable()).getStackTrace(); 
            StringBuffer buf = new StringBuffer(); 
            buf.append("Stack for "   cls.getName()   ":"); 
            for(int i=0; i<elements.length; i  ) { 
             buf.append("\n    "  
                 elements[i].getClassName() 
                 "."  
                 elements[i].getMethodName()  
                 "("  
                 elements[i].getFileName()  
                 ":"  
                 elements[i].getLineNumber() 
                 ")"); 
            } 
            //System.out.println(buf.toString()); 
            Log.i("ahking", " "  buf.toString());

    /*
        public static void main(String args[])   { 
         //An example to show how to invoke it 
         printStackTrace(Test.class); 
        } 
    */

    "

    调用的地方:
    PrintStackTrace.printStackTrace(DownloadThread.class);  //把当前类.class传进去.

     

    Log输出:
    01-01 00:03:55.648 I/ahking  ( 1513):  Stack for com.android.providers.downloads.DownloadThread:
    01-01 00:03:55.648 I/ahking  ( 1513):     com.android.providers.downloads.PrintStackTrace.printStackTrace(PrintStackTrace.java:10)
    01-01 00:03:55.648 I/ahking  ( 1513):     com.android.providers.downloads.DownloadThread.transferData(DownloadThread.java:285)
    01-01 00:03:55.648 I/ahking  ( 1513):     com.android.providers.downloads.DownloadThread.executeDownload(DownloadThread.java:254)
    01-01 00:03:55.648 I/ahking  ( 1513):     com.android.providers.downloads.DownloadThread.run(DownloadThread.java:182)

     

    看工程时, 分析不出来当前函数是如何被调用到的, 用这个方法非常有用.

    更简单的方式:

    (new Throwable()).printStackTrace();

    Log输出, 在log中搜System.err关键字就可以了:

    01-01 00:33:36.398 W/System.err( 1525): java.lang.Throwable
    01-01 00:33:36.398 W/System.err( 1525):     at com.android.providers.downloads.DownloadThread.transferData(DownloadThread.java:287)
    01-01 00:33:36.398 W/System.err( 1525):     at com.android.providers.downloads.DownloadThread.executeDownload(DownloadThread.java:254)
    01-01 00:33:36.406 W/System.err( 1525):     at com.android.providers.downloads.DownloadThread.run(DownloadThread.java:182)

     

  • 相关阅读:
    Python Day 29 socket、scoket套接字分类、基于TCP的socket、常见错误
    Python Day 28 网络编程、OSI七层模型、三次握手和四次挥手
    Python Day 27 元类、__inti__方法、__new__方法、__call__方法、单例模式、exec与eval区别、异常处理语法
    get,post区别
    Restful API
    tcp 3次握手四次挥手
    mongodb数据库常用操作的整理
    python装饰器
    python中的*args和** kwargs区别
    Vue插件
  • 原文地址:https://www.cnblogs.com/ahking17/p/2323535.html
Copyright © 2011-2022 走看看