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. java 之 对象与垃圾回收

    1.垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接,网络IO等资源) 2.程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候运行.当对象永久的失去引用后,系统会在合适的时 ...

  2. FFT教你做乘法(FFT傅里叶变换)

    题目来源:https://biancheng.love/contest/41/problem/C/index FFT教你做乘法 题目描述 给定两个8进制正整数A和B(A和B均小于10000位),请利用 ...

  3. 透彻分析反射的基础_Class类

    一.反射的基石--->Class类 1. Java类用于描述一类事物的特性,该类事物有什么属性,没有什么属性,值域这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性值 ...

  4. centos性能监控系列二:Collectl初解

    对于一个 Linux 系统管理员来说确保自己管理的系统处于一个良好的状态是其首要责任. Linux 系统管理员可以找到有很多工具来帮助自己监控和显示系统中的进程,例如 top 和 htop 今天介绍一 ...

  5. Android 实用代码片段

    一些不常见确又很实用的代码块. 1.精确获取屏幕尺寸(例如:3.5.4.0.5.0寸屏幕) public static double getScreenPhysicalSize(Activity ct ...

  6. C#照片批量压缩小工具

    做了一个照片批量压缩工具,其实核心代码几分钟就完成了,但整个小工具做下来还是花了一天的时间.中间遇到了大堆问题,并寻求最好的解决方案予以解决.现在就分享一下这个看似简单的小工具所使用的技术. 软件界面 ...

  7. docker-1 初识docker

    五分钟认识docker 什么是docker? 把他想象成一个用了一种新颖方式实现的超轻量虚拟机,在大概效果上也是正确的.当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(App ...

  8. Github学习之路-小试牛刀,练习Git 的基本操作

    一.下子windows客户端. Git 客户端下载地址:http://msysgit.github.io/ 二.打开Git Bash 命令行操作界面. 安装完成后,在开始菜单里找到“Git”-> ...

  9. 烂泥:NFS存储与VSphere配合使用

    本文首发于烂泥行天下. 公司服务器的虚拟化使用的是VM ESXi 5.0,为了更有效的利用服务器的硬盘空间.就把所有的镜像文件存放到另外一台linux服务器上,这样在使用vsphere安装虚拟机时可以 ...

  10. 关于统计变换(CT/MCT/RMCT)算法的学习和实现

    原文地址http://blog.sina.com.cn/s/blog_684c8d630100turx.html 刚开会每周的例会,最讨厌开会了,不过为了能顺利毕业,只能忍了.闲话不多说了,下面把上周 ...