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. 命令行选项
# jdb 也识别许多java命令选项,如-D,-classpath,-X<option>(非标准 VM 选项)
-help  显示帮助信息
-sourcepath <dir1:dir2:...>  在指定路径下搜索源文件,默认在当前目录下
-connect <connector-name>:<name1>=<value1>,...  附带参数连接到目标 JVM
-tclient  Java HotSpot™ VM (Client)
-tserver  Java HotSpot™ VM (Server)
-Joption  将选项传递给JVM,以运行jdb,如-J-Xms48m 设置堆大小
4. 调试 Hello World

更多信息,请参考:jdb

jdb - The Java Debugger的更多相关文章

  1. 十、jdk工具之Jdb命令(The Java Debugger)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  2. 使用JDB调试Java程序

    Java程序中有逻辑错误,就需要使用JDB来进行调试了.调试程序在IDE中很方便了,比如这篇博客介绍了在Intellj IDEA中调试Java程序的方法. 我们课程内容推荐在Linux环境下学习,有同 ...

  3. 命令行工具jdb调试Java程序

    一直在gdb 下调试c/c++程序. 突然要写个java程序,又不是很喜欢使用eclipse,那怎么调试程序呢.你还可以使用 jdb. 它是jdk 内置的一个java debug工具.类似与 gdb. ...

  4. java debugger

    当你想找方法被哪个地方调用了,可以打断点看debugger方法栈 idea Debugger

  5. Debug with jdb

    原文地址: http://www.javaworld.com/article/2077445/testing-debugging/debug-with-jdb.html Q: How do you u ...

  6. Java控制台常用命令

    http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html javaw是java的带console版本,其他一致. h ...

  7. Java Basic&Security Tools

    JDK Tools and Utilities Basic Tools These tools are the foundation of the JDK. They are the tools yo ...

  8. Java版本和功能指南

    您可以使用本指南查找和安装最新的Java,了解Java发行版(AdoptOpenJdk,OpenJDK,OracleJDK等)之间的差异,以及获得Java语言功能的概述,包括Java版本8-13. J ...

  9. java jdb命令详解

    jdb - Java debugger 功能描述: 通过简单的命令行程序,对本地或远程jvm进程进行调试. 开启jdb会话: 有多种方式可以开启jdb会话. (1)常见的方式是采用Jdb命令打开一个新 ...

随机推荐

  1. geotrellis使用(十六)使用缓冲区分析的方式解决投影变换中边缘数据值计算的问题

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 问题探索 采样说明 实现方案 总结 一.前言     ...

  2. ios如何在#import方面提升编译性能

    模块的使用非常简单,对于存在的工程,第一件事情就是让这个功能生效.可以在项目的Build Settings 中搜索Modules 找到这个选项,做以下的设置 默认的情况下都是开启的 对于系统自带的只需 ...

  3. C++继承和多态

    继承 访问控制 基类的成员函数可以有public.protected.private三种访问属性. 类的继承方式有public.protected.private三种. 公有继承 当类的继承方式为pu ...

  4. iOS开发多线程篇—多线程简单介绍

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

  5. 通过手动创建统计信息优化sql查询性能案例

    本质原因在于:SQL Server 统计信息只包含复合索引的第一个列的信息,而不包含复合索引数据组合的信息 来源于工作中的一个实际问题, 这里是组合列数据不均匀导致查询无法预估数据行数,从而导致无法选 ...

  6. MVC发布后项目存在于根目录中的子目录中时的css与js、图片路径问题

    加载固定资源js与css <script src="@Url.Content("~/Scripts/js/jquery.min.js")" type=&q ...

  7. Java 技能树

  8. Spring Scope:Web项目中如何安全使用有状态的Bean对象?

    Web系统是最常见的Java应用系统之一,现在流行的Web项目多使用ssm或ssh框架,使用spring进行bean的管理,这为我们编写web项目带来了很多方便,通常,我们的controler层使用注 ...

  9. jQuery带控制按钮向上和向下滚动文本列表

    效果:http://hovertree.com/texiao/jquery/64/ 效果图如下: 代码如下: <!DOCTYPE html> <html> <head&g ...

  10. C#中实现对象间的更新操作

    最近工作的时候遇到一个问题,根据Web端接收到的对象obj1,更新对应的对象值ogj2.先判断obj1中属性值是否为null, 若不等于null,则更新obj2中对应属性值:若等于null,则保持ob ...