JAVA-JDK调试器之JDB

2 篇文章 0 订阅
2 篇文章 0 订阅

使用调试器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
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java jdk-8u202-linux-x64.tar是Java Development Kit(JDK)的一个版本。JDK是开发和运行Java应用程序所需的软件包。这个版本是适用于64位Linux系统的。它提供了开发Java应用程序所需的工具和库。 这个版本的JDK-8u202是Java SE 8的更新版本,其中的“u202”表示更新编号。这个更新版本修复了之前版本中的安全漏洞并提供了一些性能改进。 使用该文件可以安装Java JDK到Linux系统中。首先,需要下载该文件并解压缩它。解压缩后,可以配置环境变量,将Java的可执行文件路径添加到系统的PATH变量中,以便在终端中能够直接使用Java命令。 安装完JDK后,可以使用Java命令编译和运行Java程序。JDK提供了编译器(javac)和解释器(java),可以将Java源代码编译为Java字节码,并在Java虚拟机(JVM)上运行。 除了编译和运行Java程序之外,JDK还提供了许多其他工具和库,用于开发Java应用程序。例如,它包含了Java API文档,可以帮助开发人员理解和使用Java库的各种功能。此外,JDK还包含了调试器jdb)和性能分析工具(jconsole),用于调试和优化Java程序。 总之,java jdk-8u202-linux-x64.tar是Java Development Kit的一个版本,适用于64位Linux系统,提供了开发和运行Java程序所需的工具和库。它可以通过下载、解压缩和配置环境变量来安装到系统中,并通过Java命令编译和运行Java程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值