jdb - The Java Debugger

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdb - The Java Debugger相关的知识,希望对你有一定的参考价值。

  jdb 是一个简单的命令行调试器,可以调试本地或远程 Java Virtual Machine。

jdb [ options ] [ class ] [ arguments ]
options 命令行参数
class  调试的类名称
arguments main函数的参数
1. 开始调试
  有两种方式启动调试,一个是新启动一个 JVM 加载指定的类,然后在开始执行指令时停止;另一个是连接到一个正在运行的 JVM。具体方法如下。
(1) C:\\> jdb MyClass
(2) C:\\> java -agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=n MyClass  C:\\> jdb -attach jdbconn
2. jdb 基本操作命令
help, or ?  显示帮助信息
run [class [args]]    执行 main 方法
threads 列出正在运行的线程
thread <thread id>  设置默认线程
where   转储线程堆栈

print  显示Java对象(简短描述)或原始数据类型值,若要显示本地变量在编译时需添加 -g 参数
  print 支持简单的Java表达式,如下:
    print MyClass.myStaticField
    print myObj.myInstanceField
    print i + j + k (i, j, k are primities and either fields or local variables)
    print myObj.myMethod() (if myMethod returns a non-null)
    print new java.lang.String("Hello").length()
dump    原始类型打印值,对象打印每个字段(静态和实例)的当前值,同print也支持表达式
locals 输出当前栈帧本地变量

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

stop in <class id>.<method>[(argument_type,...)]  在方法中设置断点
stop at <class id>:<line> 在某一行设置断点
  stop at MyClass:22 (在 MyClass 第22行设置断点)
  stop in java.lang.String.length (在String.length方法设置断点)
  stop in MyClass.<init>   (MyClass 构造函数)
  stop in MyClass.<clinit> (MyClass 静态块初始化方法)
clear <class id>.<method>[(argument_type,...)]  清除一个方法的断点
clear <class id>:<line>   清除某一行断点
clear                     列出所有断点
 
step  执行到下一行
next  执行当前栈帧下一行
cont   从断点处继续执行
exit 退出
3. 调试 Hello World

更多信息,请参考:jdb

技术分享
技术分享

以上是关于jdb - The Java Debugger的主要内容,如果未能解决你的问题,请参考以下文章

Cannot find a free socket for the debugger

java如何运行,从哪运行?

The python debugger(PDB)的简介

IDA远程调试出现"The file can't be loaded by the debugger plugin."云云

解决JAVA单步调试键盘输入被JDB占用的问题

Java逆向基础之JDB动态调试