开发技术-使用 JDB 调试

news/2024/11/25 3:05:27/

Java 调试器(JDB)是 JDK 内置的命令行工具。从调试的指令和命令行接口两方面看的话,JDB 至少从概念上是 GNU 调试器(GDB,受 Unix DB 的影响)的继承者。
示例:

public class SimpleDebugging {private static void foo1() {System.out.println("In foo1");foo2();}private static void foo2() {System.out.println("In foo2");foo3();}private static void foo3() {System.out.println("In foo3");int j = 1;j--;int i = 5 / j;}public static void main(String[] args) {foo1();}
}

输出:

In foo1
In foo2
In foo3
Exception in thread "main" java.lang.ArithmeticException: / by zeroat validating.SimpleDebugging.foo3(SimpleDebugging.java:23)at validating.SimpleDebugging.foo2(SimpleDebugging.java:16)at validating.SimpleDebugging.foo1(SimpleDebugging.java:11)at validating.SimpleDebugging.main(SimpleDebugging.java:27)

为了运行 JDB,你需要在编译 SimpleDebugging.java 时加上 -g 标记,从而告诉编译器生成编译信息。
1.在 IDEA 上找到 java 文件的位置
在这里插入图片描述
2.打开 cmd
在这里插入图片描述
3.编译单个 java 文件
在 cmd 中输入命令:

javac -g SimpleDebugging.java

出现中文乱码
在这里插入图片描述
输入下面的命令解决:

javac -encoding utf-8 -g SimpleDebugging.java

在文件夹中出现编译后的 class 文件
在这里插入图片描述
4.执行 JDB 命令

jdb SimpleDebugging 

注意:不带 class 后缀
接着 JDB 就会运行,出现命令行提示。你可以输入 ? 查看可用的 JDB 命令。
输入:

catch Exception

命令 catch Exception 在任何抛出异常的地方设置断点。
继续输入:

run

结果出现找不到主类错误
在这里插入图片描述
5.后续操作
在源码中将包信息注释掉
在这里插入图片描述
再重新运行以下命令:

javac -encoding utf-8 -g SimpleDebugging.java
jdb SimpleDebugging 
catch Exception
run

现在程序将运行到下个断点处,在这个例子中就是异常发生的地方。下面是运行 run 命令的结果:
在这里插入图片描述
程序运行到第16行时发生异常,但是 JDB 在异常发生时就不复存在。调试器还展示了是哪一行导致了异常。你可以使用 list 将导致程序终止的执行点列出来:

list

在这里插入图片描述
命令 locals 能转储所有的局部变量值:

locals

命令 wherei 打印进入当前线程的方法栈中的栈帧信息:

wherei

在这里插入图片描述


http://www.ppmy.cn/news/299322.html

相关文章

【王道考研】计算机网络 第一章 B 可提供背诵

上一章我们讲了计算机网络的概述即概念,组成,功能,分类,标准化工作相关组织,和性能指标,接下来就是我们第一章的最后一块部分,体系机构&参考模型,这里会讲到分层结构&#xff0c…

Java设计模式(六)— 单例模式1

系列文章目录 单例模式介绍 单例模式之静态常量饿汉式 单例模式之静态代码饿汉式 单例模式之线程不安全懒汉式 文章目录 系列文章目录前言一、单例设计模式介绍二、单例设计模式八种方式三、单例—静态常量饿汉式1.静态常量饿汉式介绍2.静态常量饿汉式案例3.静态常量饿汉式优缺…

数据结构——广义表

文章目录 前言二、特殊矩阵的压缩存储数组的存储结构和实现按行优先存储按列优先存储 矩阵的压缩存储稀疏矩阵 广义表 总结 前言 数组,数组的压缩存储,广义表 二、特殊矩阵的压缩存储 数组的存储结构和实现 对于多维数组,可以分为按行优先…

RTL8372-CG/RTL8373-CG

4-PORT 2.5G 2-PORT 10G SWITCH Controller 8-PORT 2.5G 1-PORT 10G SWITCH Controller WITH 4-port 2.5GPHY

经纬度转换 gcj02转wgs84

// 定义一些常量 const x_PI 3.14159265358979324 * 3000.0 / 180.0 const PI 3.1415926535897932384626 const a 6378245.0 const ee 0.00669342162296594323/*** 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 / 即百度转谷歌、高德* param { Number } bd_lon* param…

SQLyog 安装教程

SQLyog是一款图形化界面的MySQL数据库管理工具。SQLyog中文版支持多种数据格式导出,可快速帮助用户备份和恢复数据,还能够快速地运行SQL脚本文件,SQLyog让您随时随通过网络有效地管理远端的MySQL数据库。 可以连接到指定的MYSQL主机&#xff…

SQLyog连接MySQL8.0报2058错误的完美解决方法

https://www.jb51.net/article/171721.htm 用SQLyog连接MySQL8.0(社区版:mysql-installer-community-8.0.15.0.msi),出现错误2058(Plugin caching_sha2_password could not be loaded:xxxx),通过查询资料了解了该错误的原因并在本文中提出了…

WGS84与GCJ02、BD09经纬度坐标转换介绍

在涉及到经纬度的地方,我们在编码的时候,经常需要进行转换。而且转换代码似乎非常复杂,真正理解,其实需要做一些工作,这里我将了解的经纬度坐标相关的知识做一个梳理。 首先了解经纬度坐标系统。 因为地球并不是一个规…