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. 如何获取QQ里的截图app?

    电脑系统平台:OS X EI Capitan 10.11 在以前的旧的QQ版本,QQ的截图的偏好还有一个开机自启动的选项: 现在新的版本,却没有了"开机自动运行"的选项,然而有时候 ...

  2. Stronger (What Doesn't Kill You)

    今天听一个歌曲,挺不错的.以前一直不知道意思.这次把歌词摘抄下来. 试听音乐: 原版MV: You know the bed feels warmer 你知道被窝里的温暖 Sleeping here ...

  3. 听说你会打地鼠(动态规划dp)

    题目来源:https://biancheng.love/contest-ng/index.html#/41/problems G 听说你会打地鼠 时间限制:300ms   内存限制:65536kb 题 ...

  4. 关于手机微网站ICP备案

    今天终于拨通了陕西省通信管理局的电话,并告诉对方我们做的是一个化妆品的微网站,会涉及到使用使用支付宝支付. 询问"xxx微网站"网站经营类型,对方告知虽然使用支付宝,但是是微网站, ...

  5. SharePoint 指定配置数据库访问账户“域账户\用户”

    大家在安装sharepoint时都会遇到这个问题,域账户,什么是域账户哪?域账户简单理解就是网路账户,与本地账户不同,什么是域哪?域就是控制器. 一台Windows 计算机,它要么隶属于工作组,要么隶 ...

  6. 一个不错的shell 脚本教程 入门级

    一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂     建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行s ...

  7. 《TCP/IP详解 卷一》读书笔记-----TCP超时重传

    1.TCP提供的是可靠传输,它通过接收方发送一个确认报文ACK来提供这种可靠性.但是数据报文和确认报文都可能会丢失,所以TCP会给发出的数据报文设置一个时间,如果超时了则进行重传 2.Karn's A ...

  8. Django项目中如何建表?怎样导入数据?

    http://django-chinese-docs.readthedocs.org/en/latest/topics/db/models.html 通常在项目中的models.py文件中建表的 Th ...

  9. Android系列之网络(二)----HTTP请求头与响应头

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  10. 第13章 Windows内存体系结构

    13.1 Windows的虚拟地址空间安排 13.1.1虚拟地址空间的分区(即虚拟地址空间布局) 进程的地址空间划分 分区 x86 32位 Windows 3GB用户模式下的x86 32位Window ...