📜  JDB-会话(1)

📅  最后修改于: 2023-12-03 14:43:05.485000             🧑  作者: Mango

JDB-会话介绍

JDB (Java Debugging Bridge) 是 Java 自带调试工具,它可以用于通过命令行进行 Java 应用程序调试。其中,JDB-会话是通过命令行与调试器之间建立的交互式会话,可以让程序员在运行时更深入地分析程序运行状态。

JDB-会话的使用场景
  • 对代码进行调试,可以在代码的执行过程中动态地查看变量、内存地址、线程等信息,帮助程序员快速解决问题。
  • 对于异常出现时,可以通过 JDB-会话动态查看异常的具体信息,更好地定位出现问题的代码行。
  • 通过 JDB-会话可以进行性能分析,通过查看代码的执行时间、内存使用情况等指标,可以找到程序中的瓶颈从而进行优化。
JDB-会话的基本操作
1. 启动 Java 程序

在使用 JDB 前,需要在启动 Java 程序时开启调试功能。启动命令如下所示:

java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n YourProgram

其中,“address”参数为连接 debugger 的端口,JDB 使用该端口连接调试器。一般设置为 8000 或者更高的端口,“suspend”参数为是否在连接调试器之前等待调试器连接(即在等待建立会话之前暂停程序)。如果设置为 y 则表示等待连接,设置为 n 则表示不等待。

2. 启动 JDB-会话

启动 JDB 命令如下所示:

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000

其中,“hostname”为连接的远程主机名,一般为 localhost;“port”为连接的端口,需要与开启 Java 程序时的端口一致。

启动 JDB-会话后,可以使用以下命令进行交互:

3. 基本命令
  • help :列出可用的命令。
  • run :运行程序,程序将执行到下一个断点或结束。
  • cont :继续执行程序。
  • step :单步执行(进入到函数中)。
  • next :单步执行(不进入到函数中)。
  • list :列出代码,可以指定要列出哪个文件的哪些行。
  • where :显示当前所执行的代码行和方法。
  • locals :列出当前作用域的所有变量。
  • print :打印一个变量的值。
  • dump :以指定格式显示某个对象的信息。
  • eval :执行并打印一个表达式的值。
  • classes :列出已加载的类。
  • threads :列出所有的线程。
  • thread :切换当前线程。
  • suspend :暂停执行程序,可以在程序运行中随时使用。
  • clear :取消断点。
  • stop :终止当前正在执行的程序。
JDB-会话的优缺点分析
1. 优点
  • JDB-会话是 Java 自带调试工具,与 JDK 集成紧密,兼容性较好。
  • JDB-会话支持断点调试、变量查看、内存使用情况查看、线程状态查看等调试功能,可以快速帮助程序员找到问题。
  • JDB-会话支持 Linux、Windows 等多种操作系统,支持命令行启动,方便运维人员进行调试工作。
2. 缺点
  • JDB-会话不支持图形化界面,只支持命令行操作,适应性较差。
  • JDB-会话需要在启动 Java 程序时添加调试选项,实现起来稍有麻烦,远程调试也较为困难。
  • JDB-会话的命令较多,且需要掌握一定的命令行操作经验,初学者较难上手。