java堆栈打印(java 打印堆栈)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
今天给各位分享java堆栈打印的知识,其中也会对java 打印堆栈进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
- 1、slf4j怎么打印java错误堆栈信息throwable对象
- 2、为什么java要把异常打印到堆栈?
- 3、java 日志打印堆栈如何实现包级过滤
- 4、怎么让程序异常退出时打印堆栈信息
- 5、android 怎么打印函数堆栈 java
slf4j怎么打印java错误堆栈信息throwable对象
SLF4J 1.6.0 以前的版本,如果打印异常堆栈信息,必须用
log.error(Stringmsg,Throwablet)
log.info等对应方法.
如果msg含有变量,一般用String.format方法格式化msg.
如果用
error(Stringformat,Object...arguments)
等其它方法,异常堆栈信息会丢失.
幸好,SLF4J 1.6.0以后的版本对这个不友好的异常信息log 改进了.
error(Stringformat,Object…arguments) 这个方法也会打印异常堆栈信息,只不过规定throwable对象必须为
最后一个参数.如果不遵守这个规定,异常堆栈信息不会log出来.

为什么java要把异常打印到堆栈?
不是打印到堆栈,而是打印栈信息,因为程序执行的时候,最终还是要靠01二进制代码执行,运行在堆栈里面,所以出错或抛出异常时能被捕获到
java 日志打印堆栈如何实现包级过滤
目前使用的 log4j2.xml 方案打印的日志。但因为 web 项目必然用到各种框架工具包之类的,导致打印的日志堆栈信息中,有很多 spring 的包中的类调用链。
想实现,打印的堆栈信息,只有我指定的包前缀的才打印出来。比如我们自己编写的一段代码执行时报错了,那么执行出现如下堆栈信息:
java.lang.NumberFormatException: null
at net.oschina.aaa(aaa.java:80) ~[classes/:?]
at net.oschina.bbb(bbb.java:70) ~[classes/:?]
at net.oschina.ccc(ccc.java:60) ~[classes/:?]
at net.oschina.ddd(ddd.java:50) ~[classes/:?]
怎么让程序异常退出时打印堆栈信息
打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分方便错误查找。实际上还有另外一个非常有用的功能:分析代码的行为。android代码太过庞大复杂了,完全的静态分析经常是无从下手,因此通过打印堆栈的动态分析也十分必要。
Android打印堆栈的方法,简单归类一下
1. zygote的堆栈dump
实际上这个可以同时dump java线程及native线程的堆栈,对于java线程,java堆栈和native堆栈都可以得到。
使用方法很简单,直接在adb shell或串口中输入:
[plain] view plaincopy
kill -3 pid
输出的trace会保存在 /data/anr/traces.txt文件中。这个需要注意,如果没有 /data/anr/这个目录或/data/anr/traces.txt这个文件,需要手工创建一下,并设置好读写权限。
如果需要在代码中,更容易控制堆栈的输出时机,可以用以下命令获取zygote的core dump:
[java] view plaincopy
Process.sendSignal(pid, Process.SIGNAL_QUIT);
原理和命令行是一样的。
不过需要注意两点:
adb shell可能会没有权限,需要root。
android 4.2中关闭了native thread的堆栈打印,详见 dalvik/vm/Thread.cpp的dumpNativeThread方法:
[cpp] view plaincopy
dvmPrintDebugMessage(target,
"\"%s\" sysTid=%d nice=%d sched=%d/%d cgrp=%s\n",
name, tid, getpriority(PRIO_PROCESS, tid),
schedStats.policy, schedStats.priority, schedStats.group);
dumpSchedStat(target, tid);
// Temporarily disabled collecting native stacks from non-Dalvik
// threads because sometimes they misbehave.
//dvmDumpNativeStack(target, tid);
Native堆栈的打印被关掉了!不过对于大多数情况,可以直接将这个注释打开。
android 怎么打印函数堆栈 java
C++也是支持异常处理的,异常处理库中,已经包含了获取backtrace的接口,Android也是利用这个接口来打印堆栈信息的。在Android的C++中,已经集成了一个工具类CallStack,在libutils.so中。
使用方法:
[cpp] view plaincopy
#include utils/CallStack.h
...
CallStack stack;
stack.update();
stack.dump();
使用方式比较简单。目前Andoid4.2版本已经将相关信息解析的很到位,符号表查找,demangle,偏移位置校正都做好了。
关于java堆栈打印和java 打印堆栈的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
