zoukankan      html  css  js  c++  java
  • java系列:《java核心技术 卷1》学习笔记,chapter 11 调试技巧

    11. 6 调试技巧
    1)一个不太为人所知却非常有效的技巧是在每个类中放一个main方法,这样就可以对每个类进行单元测试。这个方法可以保留,因为在java虚拟机只调用启动类的main方法。
    2)   日志代理,( logging proxy) ,通过一个子类对象,窃取父类的方法调用,并在其中进行日志记录,示例代码如下:
    1. Random random = new Random{
    2. public double nextDouble(){
    3. double result = nextDouble();
    4. Logger.getGlobal().info("nextDouble:" + result);
    5. return result;
    6. }
    7. }
    3)利用Throwable的printStackTrace方法来打印调用堆栈;其实不一定要通过异常来打印堆栈信息,只要在代码的任何位置调用Thread.dumpStack()就可以打印当前的调用堆栈信息。
        这样的信息一般显示在System.err中。
    4)如何在文件中捕获输出流和错误流
    1. 捕获输出流
    2. java MyProg >log.txt
    3. 捕获错误流
    4. java MyProg 2>log.txt
    5. 同时捕获输出流和错误流
    6. java MyProg >&log.txt
    5)可以改变非默认的捕获异常的处理器
    1. Thread.setDefaultUncaughtExceptionHandler{
    2. new Thread.UncaughtExceptionHandler(){
    3. public void uncaughtException(Thread t, Throwable e){
    4. //save info to file
    5. }
    6. }
    7. }
    6)如果想要看到类的加载过程,可以调用 -verbose 标志启动java虚拟机,这样可以看到类似于如下的一些输出结果。
    这种方法有助于诊断由于类路径引发的问题。




    7)使用 java -Xlint:xxxx 来告诉编译器做某些语法检查。
        
    8)有一个jconsole的程序可以用来监视java虚拟机的各种参数
        jconsole 虚拟机进程id

    9)可以使用jmap实用工具捕获一个堆的转储,其中显示了堆中的每一个对象,使用如下命令:
        jmap -dump:format=b, file=dumpfilename processId
        jhat dumpFileName
        
        然后就可以使用浏览器进入 http://localhost:7000 来查看该转存对中对中的对象

    10)如果使用 java -Xprof标志运行java虚拟机,就会运行一个基本的剖析器来分析那些在代码中经常被调用的方法。剖析信息将发送到 System.out 输出中。

    11.8 使用调试器
        这个基本会了,没啥好看的。    








  • 相关阅读:
    codeforces 552 C Vanya and Scales
    CGlib小记
    关于camera senor的power引脚问题
    Android实战简易教程-第四十五枪(SlideSwitch-好看又有用的开关button)
    iOS UITableViewCell 几个方法的优先级
    android.app.Fragment与android.support.v4.app.Fragment不一致

    Delphi ADOQuery连接数据库的查询、插入、删除、修改
    updatebatch
    类方法调用
  • 原文地址:https://www.cnblogs.com/strinkbug/p/4999758.html
Copyright © 2011-2022 走看看