JPDA:Java平台调试架构
Java Platform Debugger Architecture( JPDA:Java平台调试架构) 由 Java虚拟机后端和 调试平台前端组成
1.Java虚拟机提供了Java调试的功能
2.调试平台通过 调试交互协议向Java虚拟机请求服务以对在虚拟机中运行的程序进行调试
JPDA的构架
JPDA通过 两个接口和协议来完成如上的说明,分别是 JVMTI(Java虚拟机工具接口)、JDWP(Java调试连线协议)和JDI(Java调试接口)。
1.JVMTI定义了虚拟机应该提供的调试服务,包括调试信息(Information譬如栈信息)、调试行为(Action譬如客户端设置一个断点)和通知(Notification譬如到达某个断点时通知客户端),该接口由虚拟机实现者提供实现,并结合在虚拟机中
2.JDWP定义调试服务和调试器之间的通信,包括定义调试信息格式和调试请求机制
3.JDI在语言的高层次上定义了调试者可以使用的调试接口以能方便地与远程的调试服务进行交互,Java语言实现,调试器实现者可直接使用该接口访问虚拟机调试服务。
运行方式
当虚拟机的调试服务运行时,虚拟机作为调试的服务提供端,监听一个连接,而调试器通过该连接与虚拟机进行交互。目前,Windows平台的JVM提供了两种方式的连接: 共享内存和 Socket连接,共享内存的服务提供端和调试端 只能位于同一台机,而Socket连接则支持不同异机调试,即远程调试。
虚拟机参数设置
1.启用调试服务
-Xdebug 启用调试
-Xrunjdwp:<sub-options> 加载JVM的JPDA参考实现库
2.Xrunjdwp子参数(sub-options)配置
Xrunjdwp子参数的配置格式如下
-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
几个例子
-Xrunjdwp:transport= dt_socket,server=y,address=8000
在8000端口监听Socket连接,挂起VM并且不加载运行主函数直到调试请求到达
-Xrunjdwp:transport= dt_shmem,server=y,suspend=n
选择一个可用的共享内存(因为没有指address)并监听该内存连接,同时加载运行主函数
-Xrunjdwp:transport=dt_socket,address=myhost:8000
连接到myhost:8000提供的调试服务(server=n,以调试客户端存在),挂起VM并且不加载运行主函数
-Xrunjdwp:transport=dt_shmem,address=mysharedmemory
通过共享内存的方式连接到调试服务,挂起VM并且不加载运行主函数
-Xrunjdwp:transport=dt_socket,server=y,address=8000,
onthrow= java.io.IOException, launch=/usr/local/bin/debugstub
等待java.io.IOException被抛出,然后挂起VM并监听8000端口连接,在接到调试请求后以命令 /usr/local/bin/debugstub dt_socket myhost:8000执行
-Xrunjdwp:transport=dt_shmem,server=y, onuncaught=y, launch=d:\bin\debugstub.exe
等待一个RuntimeException被抛出,然后挂起VM并监听一个可用的共享内存,在接到调试请求后以命令d:\bin\debugstub.exe dt_shmem <address>执行,<address>是可用的共享内存
还有一些关于JDPA的文章,可以参考:
http://nneverwei.iteye.com/blog/1139872
Eclipse中远程调试Tomcat
启用JPDA
goto setArgs
:doneSetArgs
set JPDA_TRANSPORT=dt_socket
set JPDA_ADDRESS=8000
set JPDA_SUSPEND=y
call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%
:end
JPDA:Java平台调试架构相关推荐
- linux java远程调试_[转]JPDA:Java平台调试架构(常用的远程调试方法)
原文出处:http://www.javaeye.com/topic/75128 最近使用WTP的Server功能很不爽,连tomcat服务器时java类中的任何改动都要重启服务器,一怒之下就改用JPD ...
- java平台调试架构JPDA
为什么80%的码农都做不了架构师?>>> 最近使用WTP的Server功能很不爽,连tomcat服务器时java类中的任何改动都要重启服务器,一怒之下就改用JPDA了,以下是一 ...
- Java 平台调试架构JPDA
转载自 Java-JPDA 概述 JPDA:Java 平台调试架构(Java Platform Debugger Architecture) 它是 Java 虚拟机为调试和监控虚拟机专门提供的一套接 ...
- java开发调试定位分析工具大全
Java是一种非常强大的编程语言,自问世以来就广受欢迎.作为现今十分流行的移动平台--Android的核心语言,它大大促进了移动通信行业的发展.因此可以肯定,随着Android平台的不断扩张,Java ...
- Java Agent 调试,Java agent debug
Java Agent 调试,agent debug 一.简介 Java agent 是在另外一个 Java 应用("目标"应用)启动之前要执行的 Java 程序,这样 agent ...
- JAVA毕业设计BS架构考研交流学习平台设计与实现计算机源码+lw文档+系统+调试部署+数据库
JAVA毕业设计BS架构考研交流学习平台设计与实现计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计BS架构考研交流学习平台设计与实现计算机源码+lw文档+系统+调试部署+数据库 本源码技 ...
- JPDA Java调试标准
JPDA(Java Platform Debugger Architecture) Java调试标准 -----发送JDWP请求-----> Debugger ...
- Java生鲜电商平台-缓存架构实战
Java生鲜电商平台-缓存架构实战 说明:在Java生鲜电商中,缓存起到了非常重要的作用,目前整个项目中才用的是redis做分布式缓存. 缓存集群 缓存集群存在的问题 1.热key 缓存集群中的某个k ...
- Java生鲜电商平台-订单架构实战
Java生鲜电商平台-订单架构实战 生鲜电商中订单中心是一个电商后台系统的枢纽,在这订单这一环节上需要读取多个模块的数据和信息进行加工处理,并流向下一环节:因此订单模块对一电商系统来说,重要性不言而喻 ...
最新文章
- C++ 优先级队列 priority_queue
- window系统安装hexo
- Git突破文件限制上传大文件
- [转帖] 固定硬盘接口 U.2和M.2
- 【centOS】centOS安装图形界面
- Wordpress固定链接伪静态
- 微博办公李国庆:急招副总裁,提请股权激励,希望俞渝同意
- C++primer笔记之顺序容器
- 基于OpenCV的三维数据点的曲面重构_MySurefaceReconstruction
- 社区护理 100404
- 教你如何选择弱电工程中使用的交换机?
- ACDsee的安装过程
- Windows电脑云便签敬业签左边的分类怎么展开?
- Tomcat修改server.xml中的context标签后无法启动
- 上“低代码”半年,30名程序员被裁,CTO离职!
- IT编程自学与培训的优缺点对比!
- 固定资产的日期之接管日期
- iOS 打电话、发短信、写邮件、打开常用软件的几种方式
- SpringCloud OpenFeign 整合 logbook 实现链路日志
- CVPR 二十年,影响力最大的 10 篇论文
热门文章
- mac 应用程序间的切换 快捷方式
- sql按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便
- 关于前端利用jsencrypt.js进行RSA加密
- 下列关于计算机软件的表述 不正确的是,下列关于会计核算软件的表述中,不正确的是()...
- 虾扑erp一站式订单管理,随时筛选查看订单状态
- 佳能550D和600D哪个好
- 保护卡下机房维护(装缷软件,改变设置)
- 编程基础:计算机相关知识
- 嘘!摸鱼神器,别让老板知道!| 语音实时转文本,时序快速出预测,YOLOv6在就能用,一行命令整理CSV | ShowMeAI资讯日报
- 毕业设计-基于Matlab的遗传算法在结构优化设计中的应用