搜狐首页 科技 楚乔传

手机搜狐

SOHU.COM

Java调试那点事

点击上方“公众号”可以订阅哦

Java调试概述

程序猿都调试或者debug过Java代码吧?都体会过被PM,PD,测试,业务同学们围观debug吧?说调试,先看看调试严格定义是什么。引用Wikipedia定义:

调试(De-bug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。调试的基本步骤:

1. 发现程序错误的存在

2. 以隔离、消除的方式对错误进行定位

3. 确定错误产生的原因

4. 提出纠正错误的解决办法

5. 对程序错误予以改正,重新测试

用调试的好处是我们就无需每次新测试都要重新编译了,不用copy-paste一堆的System.out.println(很low但很多时候很管用有没有?)。

更多时候我们调试最直接简单的办法就是IDE,Java程序员用的最多的必然是Eclipse,Netbeans和IntelliJ也有各自忠实的粉丝,各有优劣。关于用IDE如何调试可以另起一个话题再讨论。

除了IDE之外,JDK也自带了一些命令行调试工具也很方便。大家用的比较多的如下表所示:

具体用法可以参考JDK文档,这些大家在线上调试应用的时候用的也不少,比如一般线上load高的问题排查步骤是:

1.先用top找到耗资源的进程

2.ps+grep找到对应的java进程/线程

3.jstack分析哪些线程阻塞了,阻塞在哪里

4.jstat看看FullGC频率

5.jmap看看有没有内存泄露

但这个也不是今天的重点,那么问题来了(blue fly is the strongest):这些工具如何能获取远程Java进程的信息的?又是如何远程控制Java进程的运行的? 相信有不少人和我一样对这些工具的 实现原理 很好奇,本文就尝试介绍下各中缘由。

Java调试体系JPDA简介

Java虚拟机设计了专门的API接口供调试和监控虚拟机使用,被称为Java平台调试体系即Java Platform Debugger Architecture(JPDA)。JPDA按照抽象层次,又分为三层,分别是

JVM TI - Java VM Tool Interface

虚拟机对外暴露的接口,包括debug和profile

JDWP - Java Debug Wire Protocol

调试器和应用之间通信的协议

JDI - Java Debug Interface

精选