使用jdk工具jdb调试Java应用程序
一、使用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应用程序相关推荐
- 使用JDB调试Java程序
使用JDB调试Java程序 1.使用JDK的JDB工具附加调试Java程序 首先用以下命令启动Java程序: java -Xdebug -Xrunjdwp:transport=dt_socket,se ...
- java exe指的是什么,3.Java程序的执行过程中用到一套JDK工具,其中java.exe是指(5.0分)...
3.Java程序的执行过程中用到一套JDK工具,其中java.exe是指(5.0分) 答:Java编译器 最早的有关学习迁移的一种代表性理论是( ) 答:形式训练说 能够通过母婴胎盘感染的寄生虫是( ...
- [免费专栏] Android安全之利用JDB调试Android应用程序(动态代码注入技术)
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...
- 使用 Eclipse 远程调试 Java 应用程序
转载地址:使用 Eclipse 远程调试 Java 应用程序 远程调试对应用程序开发十分有用.例如,为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序 ...
- 【java】jdb调试java代码
jdb调试java代码 Java程序中有逻辑错误,就需要使用JDB来进行调试了.调试程序在IDE中很方便了,比如这篇博客介绍了在Intellj IDEA中调试Java程序的方法. 我们课程内容推荐在L ...
- IDEA远程部署调试Java应用程序
IDEA远程部署调试Java应用程序 文章目录 IDEA远程部署调试Java应用程序 基本概述 准备工作 远程服务器准备 安装JDK 配置JAVA_HOME 项目准备 创建一个SpringBoot项目 ...
- 04-20.eri-test GKE(Google K8S Engine)上的Intellij远程调试Java应用程序
Prepare the docker image 为了调试Java应用程序,我们需要向远程应用程序添加一些命令行参数. 在kubernetes部署有效负载中设置参数 DEBUG_OPTIONS=&qu ...
- 整理:使用 Visual Studio Code (vscode) 编写、运行、 调试 Java 应用程序
作为一个喜欢折腾的人,最近抽空折腾一下VScode怎么写java程序.不断更新中.. 附一个原来写的C++的:这两个链接,第二个稍微简单一些 1)Visual Studio Code配置C.C++环境 ...
- 使用 JDB 调试 Android 应用程序
http://www.tinylab.org/use-jdb-to-debug-android-application/ 目录 [隐藏] 1 前言 2 JDWP 协议介绍 3 JDB 的使用方式 4 ...
最新文章
- 报告 | 2018中国区块链行业分析报告
- 支持向量机SVM 参数选择
- 搭建Windows Azure开发环境-Azure虚拟机
- Linux 库函数与系统调用的关系与区别
- HDU Problem - 3763 CD(二分)
- 微软桌面虚拟化vdi 安装测试体验
- (转)springboot:添加JSP支持
- 只腐蚀毛刺 腐蚀算法_去毛刺工艺大全,一次性列举了14种方法,非常全面
- 如何在 Zabbix 执行远程主机的脚本或指令?如何用 Zabbix 监控网站的访问量?
- matlab 数字字母,MATLAB读取txt(包含字母和数字)
- 史上最新最全的Android培训机构大揭秘
- win7查找计算机图片,win7系统全盘搜索图片的操作方法
- 企业综合安防管理平台
- 创建 GitHub 个人访问令牌
- python 统计计数
- 在matlab中ln10,ln函数(ln在函数中等于多少)
- WIFI驱动开发——WIFI支持WPA3连接
- 微软Google等互联网公司经典面试智力题和解答
- 印度人的1919乘法
- 2018.9.18中科38所面试
热门文章
- kubernetes系列五之service管理
- 以非root权限启动nginx
- 常用批处理命令总结6
- 计算机等级考试中有没有样张,2010年计算机等级考试(一级)整理的基础题
- 4键电子手表说明书_4键电子手表怎么调时间 电子手表哪个牌子好用
- 图像评估指标:PSNR
- 共同学习关于进程的操作和计划任务管理
- 明年将突破2000亿元大关,中国母婴行业处在哪个阶段?企业如何应对“危”与“机”?...
- Euklid.v2004
- KB4088776更新失败升级win10 1803版本