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 使用调试器
    这个基本会了,没啥好看的。    




java系列:《java核心技术 卷1》学习笔记,chapter 11 调试技巧的更多相关文章

  1. java核心技术卷上学习笔记

    9月5日 学习章节:第二章 Java程序设计环境 学习包括Java的安装.命令行工具.IDE.图形化开发环境等. 9月6日 学习章节:第三章 Java的基本程序设计结构 学习包括注释.数据类型.变量. ...

  2. 20145213《Java程序设计》第八周学习笔记

    20145213<Java程序设计>第八周学习笔记 教材学习内容总结 "桃花春欲尽,谷雨夜来收"谷雨节气的到来意味着寒潮天气的基本结束,气温回升加快.刚出冬的我对于这种 ...

  3. Java架构师-十项全能学习笔记(1)

    Java架构师-十项全能学习笔记(1) @Configuration @EnableStateMachine public class OrderStateMachineConfig extends ...

  4. SpringBoot学习笔记(11):使用WebSocket构建交互式Web应用程序

    SpringBoot学习笔记(11):使用WebSocket构建交互式Web应用程序 快速开始 本指南将引导您完成创建“hello world”应用程序的过程,该应用程序在浏览器和服务器之间来回发送消 ...

  5. javaSE学习笔记(11)--- Map

    javaSE学习笔记(11)--- Map 1.Map集合 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Jav ...

  6. ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - ROSMapModify - ROS地图修改

    ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - 2 - MapModify地图修改 We can use gmapping model to genera ...

  7. Linux学习笔记(11)linux网络管理与配置之一——配置路由与默认网关,双网卡绑定(5-6)

    Linux学习笔记(11)linux网络管理与配置之一——配置路由与默认网关,双网卡绑定(5-6) 大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配置DNS ...

  8. Flutter学习笔记(11)--文本组件、图标及按钮组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 文本组件 文本组件(text)负责显示文本和定义显示样式,下表为text常见属性 Text组件属性及描述 属性名 类型 默认 ...

  9. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

随机推荐

  1. OC语言-05-OC语言-内存管理

    一.引用计数器 1> 栈和堆 栈 ① 主要存储局部变量 ② 内存自动回收 堆 ① 主要存储需要动态分配内存的变量 ② 需要手动回收内存,是OC内存管理的对象 2> 简介 作用 ① 表示对象 ...

  2. OC语言-02-OC语言-基础知识

    一.基础语法 1> OC语言和C语言 C语言是面向过程的语言,OC语言是面向对象的语言 OC语言继承了C语言,并增加了面向对象的思想 以下内容只介绍OC语言与C语言的不同之处 2> 关键字 ...

  3. android 之 spinner的简单使用

    先看spinner的效果图: 代码: MainActivity package com.mecury.spinnertest; import java.util.ArrayList; import a ...

  4. mysql高可用之LVS + KEEPALIVE + MYSQL

    1.架构图 注意 (一)   Mysql需要把bind-address的配置去掉,否则无法实现虚拟ip访问 (二)   关闭所有linux防火墙:/sbin/iptables –F(可能没用) (三) ...

  5. Effective Java 23 Don't use raw types in new code

    Generic types advantage Parameterized type can provide erroneous check in compile time. // Parameter ...

  6. 在Web api2 中传递复杂参数的一点心得

    这两天在做的一个项目基于webapi2,期间遇到了复杂参数传递的问题.其中刚好看到园友的这篇文章,但是我测试收结果是失败的,还不知道是什么原因.最终经过思考后,找到了一种方法,和大家分享下. 在前端我 ...

  7. IE下实现打印功能

    先贴代码: <html> <head> <style type="text/css"> *{margin:0px;padding:0px;} . ...

  8. GDI学习之俄罗斯方块续

    当前方块对象 #region 定义砖块int[i,j,y,x] Tricks:i为那块砖,j为状态,y为列,x为行 private int[, , ,] Tricks = {{ { {,,,}, {, ...

  9. SQL获取时间段内的所有月份

    select convert(varchar(7),dateadd(month,number,'2010-01-01'),120) AS MONTHfrom master..spt_valueswhe ...

  10. 问题解决——OpenGL超级宝典 关于gltDrawTorus的错误解决

    看OpenGL超级宝典的时候,遇到一个函数 “gltDrawTorus”,在TRANSFORM和SPHEREWORLD中都有用到.但是一开始在自己写示例代码里时却没法使用,而在作者的代码目录结构下却可 ...