一、使用jdb调试的应用场景。

1、一般开发阶段调试bug可以使用开发工具(idea、eclipse)自带的调试插件进行本地调试和远程调试。使用开发工具自带的调试插件固然很方便、但是多掌握一门调试工具意味着能够多应对一种应用场景。

、但是当java程序处于受限环境下运行,比如应用服务器是隔离的内网环境,这时候在服务器上安装开发工具就显得那么繁琐。由于jdb是jdk自带的命令行调试工具,它本身是轻量级的,也省去了额外的安装环节。

二、jdb调试jar包

1、运行

  java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar test.jar archivessive-1.0.jar 命令启动被调试端

一般我们使用java -jar xxx.jar启动一个可执行的jar包,使用jdb进行调试,我们添加额外的命令行参数 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

该命令中dt_socket实际上对应一个dll动态链接库,通过查看jdk安装目录下的文件可以发现

通过dumpbin命令查看dt_socket.dll的导出函数发现jdwpTransport_OnLoad

 所以这个调试功能是使用native库实现的。

选项 suspend=y的时候 将会挂起主线程

选项suspend=n的时候将不会挂起主线程

监听端口为8000,可以任意指定

2、运行 jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000 

启动调试端

以上图中是成功连接8000端口的示例

以上是无法连接到8001端口 的示例

使用 jdb成功连接被调试端后,就可以开始设置断点了

上图中使用 methods 类的完全限定名称 命令就可以列举出这个类的所有方法

上图中使用stop in 对类的searchByMultiCondition方法进行设置断点。 使用stop in 对方法设置断点的结果是 当断点命中的时候会断点停留在方法体的第一行,当然也可以使用stop at 针对行号进行设置断点

此时运行对应的接口方法 将会命中断点,断点命中的时候 对应的线程将会挂起,此时可以在命令行输入相应的调试命令。比如可以查看本地变量的值、设置本地变量的值、转到下一步等等

使用 locals命令可以列出相应的本地变量、此处方法的参数也是被作为本地变量来对待的 。

使用 eval 本地变量名 可以打印出变量的值、实际上是调用了变量的toString方法。

使用set命令可以修改本地变量的值、如上图id字段值被修改成了111

使用use java源代码路径  命令 可以结合源码进行调试,使用list命令可以看到当前断点在源码中的位置。

使用next 命令将会执行到下一行

使用 run 命令执行到下一个断点位置

为了不用每次重新设置断点和重复的命令,可以将预定义的命令放在ini文件中,

jdb.ini的内容为

将jdb调试端的命令放在批处理文件 中批量执行

使用jdk工具jdb调试Java应用程序相关推荐

  1. 使用JDB调试Java程序

    使用JDB调试Java程序 1.使用JDK的JDB工具附加调试Java程序 首先用以下命令启动Java程序: java -Xdebug -Xrunjdwp:transport=dt_socket,se ...

  2. java exe指的是什么,3.Java程序的执行过程中用到一套JDK工具,其中java.exe是指(5.0分)...

    3.Java程序的执行过程中用到一套JDK工具,其中java.exe是指(5.0分) 答:Java编译器 最早的有关学习迁移的一种代表性理论是( ) 答:形式训练说 能够通过母婴胎盘感染的寄生虫是( ...

  3. [免费专栏] Android安全之利用JDB调试Android应用程序(动态代码注入技术)

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  4. 使用 Eclipse 远程调试 Java 应用程序

    转载地址:使用 Eclipse 远程调试 Java 应用程序 远程调试对应用程序开发十分有用.例如,为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序 ...

  5. 【java】jdb调试java代码

    jdb调试java代码 Java程序中有逻辑错误,就需要使用JDB来进行调试了.调试程序在IDE中很方便了,比如这篇博客介绍了在Intellj IDEA中调试Java程序的方法. 我们课程内容推荐在L ...

  6. IDEA远程部署调试Java应用程序

    IDEA远程部署调试Java应用程序 文章目录 IDEA远程部署调试Java应用程序 基本概述 准备工作 远程服务器准备 安装JDK 配置JAVA_HOME 项目准备 创建一个SpringBoot项目 ...

  7. 04-20.eri-test GKE(Google K8S Engine)上的Intellij远程调试Java应用程序

    Prepare the docker image 为了调试Java应用程序,我们需要向远程应用程序添加一些命令行参数. 在kubernetes部署有效负载中设置参数 DEBUG_OPTIONS=&qu ...

  8. 整理:使用 Visual Studio Code (vscode) 编写、运行、 调试 Java 应用程序

    作为一个喜欢折腾的人,最近抽空折腾一下VScode怎么写java程序.不断更新中.. 附一个原来写的C++的:这两个链接,第二个稍微简单一些 1)Visual Studio Code配置C.C++环境 ...

  9. 使用 JDB 调试 Android 应用程序

    http://www.tinylab.org/use-jdb-to-debug-android-application/ 目录 [隐藏] 1 前言 2 JDWP 协议介绍 3 JDB 的使用方式 4  ...

最新文章

  1. 报告 | 2018中国区块链行业分析报告
  2. 支持向量机SVM 参数选择
  3. 搭建Windows Azure开发环境-Azure虚拟机
  4. Linux 库函数与系统调用的关系与区别
  5. HDU Problem - 3763 CD(二分)
  6. 微软桌面虚拟化vdi 安装测试体验
  7. (转)springboot:添加JSP支持
  8. 只腐蚀毛刺 腐蚀算法_去毛刺工艺大全,一次性列举了14种方法,非常全面
  9. 如何在 Zabbix 执行远程主机的脚本或指令?如何用 Zabbix 监控网站的访问量?
  10. matlab 数字字母,MATLAB读取txt(包含字母和数字)
  11. 史上最新最全的Android培训机构大揭秘
  12. win7查找计算机图片,win7系统全盘搜索图片的操作方法
  13. 企业综合安防管理平台
  14. 创建 GitHub 个人访问令牌
  15. python 统计计数
  16. 在matlab中ln10,ln函数(ln在函数中等于多少)
  17. WIFI驱动开发——WIFI支持WPA3连接
  18. 微软Google等互联网公司经典面试智力题和解答
  19. 印度人的1919乘法
  20. 2018.9.18中科38所面试

热门文章

  1. kubernetes系列五之service管理
  2. 以非root权限启动nginx
  3. 常用批处理命令总结6
  4. 计算机等级考试中有没有样张,2010年计算机等级考试(一级)整理的基础题
  5. 4键电子手表说明书_4键电子手表怎么调时间 电子手表哪个牌子好用
  6. 图像评估指标:PSNR
  7. 共同学习关于进程的操作和计划任务管理
  8. 明年将突破2000亿元大关,中国母婴行业处在哪个阶段?企业如何应对“危”与“机”?...
  9. Euklid.v2004
  10. KB4088776更新失败升级win10 1803版本