`

JAVA-JDK调试器之JDB

阅读更多

使用调试器JDB

JDK包含一个基于命令行方式的调试器-jdb . public class YY{

public class YY{
	Integer i = null;
	public YY(){}
	public static void main(String[] args){
		String mm = null;
		System.out.println(mm.length());		
			
	}
}
$java YY
Exception in thread "main" java.lang.NullPointerException
	at YY.main(YY.java:5)
$ jdb YY
正在初始化 jdb...
> run
运行 YY
设置 未捕捉到 java.lang.Throwable
设置延迟的 未捕捉到 java.lang.Throwable
> 
VM 已启动: 
出现异常:java.lang.NullPointerException(未捕捉)"thread=main", YY.main(), line=5 bci=6
5    		System.out.println(mm.length());		

main[1] 
main[1] print i
com.sun.tools.example.debug.expr.ParseException: Name unknown: i
 i = null
main[1] print YY.i
com.sun.tools.example.debug.expr.ParseException: No static field or method with the name i in YY
 YY.i = null
main[1] list
1    public class YY{
2    	public YY(){}
3    	public static void main(String[] args){
4    		String mm = null;
5 => 		System.out.println(mm.length());		
6    		int i=0;
7    		if(args.length==1){
8    			i = Integer.parseInt(args[0]);		
9    		}
10    		assert i>0:"param error";
main[1] help
** 命令列表 **
connectors                -- 列出此 VM 中可用的连接器和传输器

run [类 [参数]]        -- 开始执行应用程序的主类

threads [线程组]     -- 列出线程
thread <线程 ID>        -- 设置默认线程
suspend [线程 ID]    -- 暂停线程(默认值为 all)
resume [线程 ID]     -- 恢复线程(默认值为 all)
where [<线程 ID> | all] -- 转储线程的堆栈
wherei [<线程 ID> | all] -- 转储线程的堆栈以及 pc 信息
up [n 帧]             -- 向上移动线程的堆栈
down [n 帧]           -- 向下移动线程的堆栈
kill <线程 ID> <表达式>   -- 中止具有给定的异常对象的线程
interrupt <线程 ID>     -- 中断线程

print <表达式>              -- 输出表达式的值
dump <表达式>               -- 输出所有对象信息
eval <表达式>               -- 计算表达式的值(与 print 作用相同)
set <lvalue> = <表达式>     -- 为字段/变量/数组元素指定新值
locals                    -- 输出当前堆栈帧中的所有本地变量

classes                   -- 列出当前已知的类
class <类 ID>          -- 显示已命名类的详细信息
methods <类 ID>        -- 列出类的方法
fields <类 ID>         -- 列出类的字段

threadgroups              -- 列出线程组
threadgroup <名称>        -- 设置当前线程组

stop in <类 ID>.<方法>[(参数类型,...)]
                          -- 在方法中设置断点
stop at <类 ID>:<行> -- 在行中设置断点
clear <类 ID>.<方法>[(参数类型,...)]
                          -- 清除方法中的断点
clear <类 ID>:<行>   -- 清除行中的断点
clear                     -- 列出断点
catch [uncaught|caught|all] <类 ID>|<类模式>
                          -- 出现指定的异常时中断
ignore [uncaught|caught|all] <类 ID>|<类模式>
                          -- 对于指定的异常,取消 'catch'
watch [access|all] <类 ID>.<字段名>
                          -- 监视对字段的访问/修改
unwatch [access|all] <类 ID>.<字段名>
                          -- 停止监视对字段的访问/修改
trace [go] methods [thread]
                          -- 跟踪方法的进入和退出。
                          -- 除非指定 'go',否则所有线程都将暂停
trace [go] method exit | exits [thread]
                          -- 跟踪当前方法的退出或所有方法的退出
                          -- 除非指定 'go',否则所有线程都将暂停
untrace [方法]         -- 停止跟踪方法的进入和/或退出
step                      -- 执行当前行
step up                   -- 执行到当前方法返回其调用方
stepi                     -- 执行当前指令
next                      -- 跳过一行(跨过调用)
cont                      -- 从断点处继续执行

list [line number|method] -- 输出源代码
use(或 sourcepath)[源文件路径]
                          -- 显示或更改源路径
exclude [<类模式>, ...|“无”]
                          -- 不报告指定类的步骤或方法事件
classpath                 -- 从目标 VM 输出类路径信息

monitor <命令>         -- 每次程序停止时执行命令
monitor                   -- 列出监视器
unmonitor <监视器号>      -- 删除某个监视器
read <文件名>           -- 读取并执行某个命令文件

lock <表达式>               -- 输出对象的锁信息
threadlocks [线程 ID]   -- 输出线程的锁信息

pop                       -- 弹出整个堆栈,且包含当前帧
reenter                   -- 与 pop 作用相同,但重新进入当前帧
redefine <类 ID> <类文件名>
                          -- 重新定义类代码

disablegc <表达式>          -- 禁止对象的垃圾回收
enablegc <表达式>           -- 允许对象的垃圾回收

!!                        -- 重复执行最后一个命令
<n> <命令>             -- 将命令重复执行 n 次
# <命令>               -- 放弃(不执行)
help(或 ?)               -- 列出命令
version                   -- 输出版本信息
exit(或 quit)            -- 退出调试器

<类 ID>: 带有软件包限定符的完整类名
<类模式>: 带有前导或后缀通配符 (*) 的类名
<线程 ID>: 'threads' 命令中所报告的线程号
<表达式>: Java(TM) 编程语言表达式。
支持大多数常见语法。

可以将启动命令置于 "jdb.ini" 或 ".jdbrc" 之中
(两者位于 user.home 或 user.dir 中)
main[1] exit
 

 

分享到:
评论

相关推荐

    java反编译class源码-java-n-IDE-for-Android:java-n-IDE-for-Android

    调试器 (jdb)。 运行java文件、class文件 :check_mark: 构建java库 :check_mark: 支持VCS 反编译类,jar Java 代码格式化程序(Google Java 代码格式化程序) :check_mark: 构建安卓应用。 :check_mark: XML 自动...

    JAVA帮助文档全系列_JDK1.5_、JDK1.6、_JDK1.7_官方中英完整版下载

    它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。 JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK...

    JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载地址

    它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。 JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK...

    JDK(Java Development Kit)是Java开发工具包,提供了Java开发所需的工具和库

    调试工具:JDK提供了调试工具,如Java调试器(jdb)、Java监视器工具(jconsole)等,帮助开发人员调试和分析Java程序。 性能工具:JDK包含了性能监控工具,如Java VisualVM、Java Mission Control等,用于监控和...

    jdk-17-linux-x64-bin.rpm

    jdk-17_linux-x64_bin.rpm是一个针对Linux x64架构的Java开发工具包(JDK)的软件包。JDK是Java开发的核心工具...JDK 17提供了一系列强大的功能和工具,包括Java编译器(javac)、Java虚拟机(JVM)、调试器(jdb)和性

    JDK1.8(32位和64位)正式版+JDK1.8API帮助文档

    jdk1.8新特性详解:(http://www.oschina.net/translate/everything-about-java-8) JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码 jar – 打包工具,将相关的类文件打包成一个文件 javadoc – ...

    jdk1.6 windows 64位

    组成 JDK包含的基本组件包括: ·javac – 编译器,将源程序转成字节码 ·jar – 打包工具,将相关的类文件打包成一个文件 ·javadoc – 文档生成器,从源码注释中提取文档 ·jdb – debugger,查错工具 ·java –...

    jdk-6u45-windows-i586 & x64

    jdk1.6安装教程及环境变量配置: 双击运行"jdk-6u45-windows-x64.exe"程序,依提示进行安装即可。 包含组件 javac – 编译器,将源程序转成字节码 ...Jconsole: Java进行系统调试和监控的工具结构图

    jdk8安装超详细教程,两种配置环境变量方法

    3. **工具集**:JDK还包括一系列开发者工具,如Java打包工具(jar)、Java文档生成工具(javadoc)、Java调试器(jdb)、Java性能分析工具(Java VisualVM)等,这些工具极大地便利了Java应用的开发和维护过程。

    win64位 jdk6,jdk7,jdk8版本 开发工作可以用到,为不方便在官网下载小伙伴分享

    开发Java程序必须有Java开发环境,即Java开发工具包,这个工具包包含了编译、运行、调试等关键命令,哪怕运行Eclipse,NetBeans等开发工具,也要有JDK或JRE的支持,所以开发Java程序之前的第一步准备就是获取JDK JDK...

    xjdb:java的命令行调试器

    xjdb 使用其他开源项目,包括 libreadline-java-0.8.0、Rhino 1.7R4 javascript 引擎和 jython-2.5.3。 因此,您可以在命令提示符中使用 readline,在 xjdb 中使用脚本(javascript 或 jython)。 目前,xjdb 是在 ...

    JavaEE所需的配置文件(JDK,JRE)

    jdk全称“Java Development Kit”,指的是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序的开发。jdk是java开发的核心,包括了Java运行环境、一堆Java工具和Java基础的类库 JDK包含的基本...

    jsp小示例显示日期

    JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码 jar – 打包工具,将相关的类文件打包成一个文件 javadoc – 文档生成器,从源码注释中提取文档 ...Jconsole: Java进行系统调试和监控的工具

    JAVA实验报告一.docx

    Java 的编译命令 (javac),执行命令 (java) 和一些工具命令 (javadoc, jdb 等) 都在其安装路径下的 bin 目录中。 CLASSPATH:该环境变量也指定一个路径列表,是用于搜索 Java 编译或者运行时需要用到的类。在 ...

    Java2核心技术.part5

    11.7.1 JDB调试器 11.7.2 Eclipse调试器 第12章流与文件 12.1流 12.2完整的流结构 12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出...

    Java2核心技术.part3

    11.7.1 JDB调试器 11.7.2 Eclipse调试器 第12章流与文件 12.1流 12.2完整的流结构 12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出...

    Java2核心技术.part1

    11.7.1 JDB调试器 11.7.2 Eclipse调试器 第12章流与文件 12.1流 12.2完整的流结构 12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7...

    Java2核心技术.part6

    11.7.1 JDB调试器 11.7.2 Eclipse调试器 第12章流与文件 12.1流 12.2完整的流结构 12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出...

    Java2核心技术.part4

    11.7.1 JDB调试器 11.7.2 Eclipse调试器 第12章流与文件 12.1流 12.2完整的流结构 12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出...

    Java2核心技术.part2

    11.7.1 JDB调试器 11.7.2 Eclipse调试器 第12章流与文件 12.1流 12.2完整的流结构 12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出...

Global site tag (gtag.js) - Google Analytics