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)

     

  • 相关阅读:
    Spring的事务管理
    C#的WinForm中制作饼状图和柱状图
    .net+mssql制作抽奖程序思路及源码
    C#中简单调用MD5方法以及MD5简介
    【好文翻译】一步一步教你使用Spire.Doc转换Word文档格式
    C#调用C/C++动态库 封送结构体,结构体数组
    【好文翻译】测试必看:使用Spire.XLS来生成自动化报表!
    浅析C#基于TCP协议的SCOKET通信
    C# RSA和Java RSA互通
    C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)
  • 原文地址:https://www.cnblogs.com/ahking17/p/2323535.html
Copyright © 2011-2022 走看看