用JPDA轻松调试Java代码

JPDA框架和JDWP协议 在逆向开发中,一般都需要对目标App进行代码注入。主流的代码注入工具是,这个工具能稳定高效实现java代码hook和native代码hook,不过缺点是需要使用Root设备,而且用js开发,入门门槛较高。最近发现一种非Root环境下对Debug App进行代码注入的方案,原理是利用Java调试框架,通过调试器与目标虚拟机之间通讯,实现对虚拟机进程的修改。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 在无法访问运行中的实例时,调试一个Java程序可能相当麻烦;当应用程序在远程环境下运行,并且不会在控制台或日志文件中输出任何结果时,调试工作变得更加困难。如果你需要对一个运行中的Java应用程序进行全方位调试,Sun的Java平台调试构架(JPDA)可为您提供帮助。 JPDA是一组API集合,旨在帮助你调试Java代码。J2SE自1.2.2版开始推出JPDA工具集,并在1.3.x版中将它直接包含在J2SE软件包中。 JPDA并非一个应用程序或调试工具,而是一组精心设计的接口与协议,了解这点很重要。Sun设计这一标准的目的是提供一个基础构架,以便第三方工具和调整器能够高效利用它。还有许多利用JPDA的优秀调试器和IDE,包括一些获得广泛认可的工具,如Borland JBuilder、Oracle JDeveloper、IntelliJ IDEA、Sun NetBeans、IBM Eclipse等等。不过,Sun在它的传统命令行式调试器jdb中提供了一个参考实例。Java 1.3重新编写了jdb以支持JPDA。在本文中,我将讨论JPDA技术及它的一些实际应用。 工作原理 JPDA由三个接口构成,这些接口为桌面系统的开发环境而设计。Java虚拟机工具接口(JVMTI)定义虚拟机(VM)在调试时必须提供的服务。(在Java 5.0中,JVMTI替代已被删除的Java虚拟机调试接口)。Java调试线协议(JDWP)定义在调试过程和调试器前端之间传输的信息和请求的格式。它执行Java调试接口(JDI)。JDI定义用户代码级信息和请求。 JPDA概念将调试过程分为两部分:被调试的程序(被调试者-debuggee)和JDI。JDI一般为一个调试应用程序的用户接口(或Java IDE的一部分)。被调试的应用程序在后端运行,而JDI在前端运行。在前端与后端之间有一个通信通道运行JDWP协议;因此,被调试程序与调试器可以位于同一个系统内,也可位于不同的系统中。 从开发者的角度,一个调试应用程序可进入任何JPDA层面。因为JDI是最高层,也最容易使用,我们推荐使用这个接口。假设一家公司用JDI开发了一个调试器。公司能够把它用于参考实例中,它将自动与VM和Sun支持的平台协同工作,因此大多数IDE供应商采用这种方式。还可以这样,例如,参考实例在前端运行,被调试者运行另一家公司执行JDWP(它可能运行或忽略JVMTI)的VM。 一些调试器可能建立在较低层面之上,如JDWP(例如,如果Java没有编写前端)或JVMTI(针对需要低级功能的专用调试器)。 调试器的后端负责由调试器前端向被调试者VM传输请求,如“告诉我变量X的值”;它还负责向前端传输对这些请求(包括像到达断点之类的预计事件)的响应。后端与前端利用JDWP通过一个通信通道进行通信。后端与被调试者VM利用JVMTI进行通信。 通信通道连接调试器的前端与后端。可以认为它由两个装置组成:一个连接器和一个传送器。连接器是一个JDI对象,它在前端与后端建立连接;可能有三种类型的连接器: 收听型:前端从后端收听一个进入的连接。 依附型:前端依附到一个已运行的后端上。 发布型:前端发布运行被调试者代码和后端的Java过程。 传送器是在前端和后端传输信息的基本装置。在JPDA规范中没有指定必须使用的传送器装置。可能的装置包括:套接字、串行线路和共享内存。但是,JDWP指定了流经通道的连续化位流的格式与语义。许多IDE和调试器都支持两种类型的传送器(Sun的参考实例就是如此):共享内存(如果被调试者和调试器位于同一系统)和套接字(被调试者和调试器可位于任何地方,包括同一系统)。 从J2SE 5.0开始,JPDA包括了服务提供器接口,允许对连接器与传送器实例进行开发与配置。这些服务提供器服务接口允许调试器和其它工具供应商开发新的连接器实例,并提供除Sun的套接字和共享内存以外的其它传送器装置。 被调试者与调试器之间的通信以连接为导向。因此,一方必须作为服务器,收听一个连接;另一方作为一个客户端连接到服务器。JPDA允许以调试应用程序和目标VM为服务器。 JPDA实际应用 如果你需要使用套接字传送器,在对应的JVM中以dt_socket为名确定自变量的类型。如果被调试者和调试器位于同一机器之中,且运行的是Windows系统,你可以使用名为dt_schmem的共享内存连接器。如果你希望用一个与JPDA兼容的调试器调试应用程序,你应在调试模式下运行调试器,并提交其它参数,如传送器类型、主机名称、端口号及其它信息。所有JPDA和调试参数必须在启动应用程序时作为自变量提交。 要进行调试,你必须将调试JDWP代理加载到应用程序的JVM中。从Java 5.0开始,你可以用-agentlib:jdwp选项来完成加载。5.0以前版本则使用-Xdebug和-Xrunjdwp选项(5.0也支持-Xdebug和-Xrunjdwp选项,不过新的-agentlib:jdwp选项更加好用。因为5.0中的JDWP代理使用JVMTI接口连接VM,而非旧的JVMDI接口)。你应该向-agentlib:jdwp(Java 5.0中)或-Xrunjdwp(Java 5.0以前版本) 参数提供子选项;两组可能的子选项相同。 以下列方式指定子选项: -agentlib:jdwp=[=],[=]... 或 -Xrunjdwp:[=],[=]... 你可以使用这些选项: help:打印如何应用它的简单信息,并退出VM。 server:(是”y”或否”n”):如“server=y”,收到一个要依附的调试应用程序;如“server=n”,依附到指定地址的调试应用程序。 address:连接传送地址。如果server=n,尝试依附到这个地址的调试应用程序;如server=y,收到这个地址的连接。 timeout:如果server=y,它以毫秒为单位指定等待调试器依附的时间;如server=n,它以毫秒为单位指定依附到调试器所用的时间。 suspend:如“是”,JVM延缓执行,直到调试器与被调试JVM建立连接。 以下是命令行实例: agentlib:jdwp=transport=dt_socket,server=y,address=8000 在端口8000收听一个套接字连接。在主类加载前延缓这个VM(默认suspend=y)。一旦连接上调试应用程序,它发送一个JDWP命令恢复VM。 agentlib:jdwp=transport=dt_shmem,server=y,suspend=n 选择一个有效的共享内存传输地址并将它打印出来。在那个地址收听一个共享内存连接。在调试应用程序依附之前,允许VM开始执行。 agentlib:jdwp=transport=dt_socket,address=myhost:8000 通过myhost主机端口8000的套接字依附到一个运行的调试应用程序。在主类加载前延缓这个VM
实现航迹关联的三种JPDA算法及Matlab代码 本文介绍了三种不同的JPDA算法实现航迹关联,并提供相应的Matlab代码。卡尔曼滤波是一种常用的状态估计算法,其基本思想是根据系统模型和观测数据,通过迭代计算来更新系统状态的估计值。基于卡尔曼滤波的JPDA算法是指在航迹关联问题中,同时利用卡尔曼滤波器的状态估计和概率假设,从而确定目标之间的关联关系。基于粒子滤波的JPDA算法是指在航迹关联问题中,通过抽样生成一组粒子(代表系统的不同可能状态),从而计算目标之间的关联概率。基于启发式搜索的JPDA算法是指在航迹关联问题中,通过多次迭代寻找最优关联方案。 阅读详情

相关推荐

JPDA算法实现航迹关联附Matlab代码

航迹关联是多目标跟踪中的一个重要问题,其目标是根据来自多个传感器的测量数据,将这些数据与系统中的目标航迹进行关联。JPDA(Joint Probabilistic Data Association)是一种常用的航迹关联算法,它通过联合概率分析来计算每个测量数据与目标航迹的关联概率,并根据概率大小进行关联。该函数首先计算创新(innovation)和创新协方差(innovationCov),然后使用多元高斯分布计算关联概率,并通过门限值进行归一化。然后使用嵌套循环计算每个航迹与测量数据的关联概率,通过调用。

带你成为别人眼中的大佬! 876

​【目标跟踪】基于联合概率关联JPDA多目标跟踪matlab代码

1 简介 在多目标和杂波环境下,量测与对应目标源的关联将变得复杂,当邻近目标运动时,采用滤波算法跟踪目标时,源于目标的量测会相互干扰,导致误跟现象的发生.针对此问题,本文采用基于联合概率数据关联JPDA的方法进行处理,通过引入两个基本假设条件,即每个量测只有一个源和每个量测至多源于一个目标,计算各量测与各目标源的关联概率,进而估计出各目标的状态信息.仿真结果表明在采用本文的算法处理多目标问题时,目标的位置和速度信息能够得到较好的估计,避免误跟现象的发生. 联合概率数据互联( Joint Probabil

Matlab_dashi的博客 575

JPDA多目标跟踪算法与MATLAB实现详解

在现代军事、民用航空和智能监控等多个领域中,实时准确地跟踪移动目标显得至关重要。JPDA(联合概率数据关联)算法作为多目标跟踪领域的一种经典算法,成功地解决了传统单目标跟踪技术在复杂环境下的不足。本章将对JPDA算法进行概括性的介绍,包括其基本原理、应用场景以及与其它跟踪技术的比较。贝叶斯定理是概率论中的一种定理,它描述了已知某些条件下某个事件的概率与已知该事件条件下某条件概率的数学关系。该定理可以表示为:其中,( P(A|B) ) 是在事件B发生的条件下事件A发生的条件概率;

weixin_28729843的博客 2712

java远程调试

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33778778的博客 365

JPDA算法Matlab代码

采用JPDA数据关联算法实现两个个匀速运动目标的点迹与航迹的关联。上传的为压缩文件,解压后有两个m文件,一个是Data_JPDAF.m,另一个是JPDAF.m。将两个文件放到Matlab的同一个目录下,直接运行文件Data_JPDAF.m即可。用户可以根据自己的需要修改目标的起始位置参数和速度参数。

JPDA算法实现

在matlab中,运行Data_JPDAF.m,即可模拟JPDA多目标,有matlab仿真图输出,望各位学者参考

《转》用JPDA轻松调试Java代码

在无法访问运行中的实例时,调试一个Java程序可能相当麻烦;当应用程序在远程环境下运行,并且不会在控制台或日志文件中输出任何结果时,调试工作变得更加困难。如果你需要对一个运行中的Java应用程序进行全方位调试,Sun的Java平台调试构架(JPDA)可为您提供帮助。 JPDA是一组API集合,旨在帮助你调试Java代码。J2SE自1.2.2版开始推出JPDA工具集,并在1.3.x版...

zhangyeny的专栏 199

JPDA----java调试体系

文档内详细介绍了java的调试体系--JPDA,包括其接口,以及一些与虚拟机相关的知识

Java实用技巧:用JPDA轻松调试Java代码

星期六 2007年08月04日Java实用技巧:用JPDA轻松调试Java代码在无法访问运行中的实例时,调试一个Java程序可能相当麻烦;当应用程序在远程环境下运行,并且不会在控制台或日志文件中输出任何结果时,调试工作变得更加困难。如果你需要对一个运行中的Java应用程序进行全方位调试,Sun的Java平台调试构架(JPDA)可为您提供帮助。   JPDA是一组API集合,旨在帮助你调

数据就是一切 1078

基于JPDA的MATLAB代码

可执行的基于数据关联的传统多目标跟踪算法,关联算法采用JPDA

JPDA学习笔记与示例代码

包含了JPDA学习笔记,MATLAB代码以及相关的论文。可以结合笔记和论文看代码,看懂后可以对代码中的参数进行调节,以理解不同参数的作用。

浅谈 Java JPDA

  前言  程序员在坊间有非常多有趣的故事,其中就有这么一则:”这个在我的电脑上是好的,没问题的呀,诺,你看咯,一定是你打开姿势不正确,浏览器版本不正确,操作系统不统一等,总之不是我代码问题(傲娇)”。看到这里,有些朋友也许会笑,甚至拿着这些梗来调侃我们程序员兄弟。我是第一个不同意的,做技术的都知道,上面的回答一点毛病都没有,甚至称得上有理有据呀。就拿前端来说:编写的代码,在chrome浏览器上能...

weixin_34208283的博客 126

【R语言-生存分析之观察生存率计算】

全人群肿瘤登记资料常用的统计分析指标包括发病率、死亡率、现患率以及生存率等,其中肿瘤生存率是评估肿瘤治疗效果和肿瘤负担的必要指标,其计算涉及肿瘤患者的发病、 死亡和随访三个方面的资料, 数据整理和计算过程均较为复杂, 如何及时、 准确地计算肿瘤生存率, 并使其可以在不同地区、 不同人群、不同时期间被客观公正地比较和评价,仍然是统计学家们一直在研究的主题。

weixin_46579654的博客 5441

充分利用 J2EE 调试工具--Java 开发环境的增强功能有助于调试J2EE 应用程序

星期六 2007年08月04日充分利用 J2EE 调试工具--Java 开发环境的增强功能有助于调试J2EE 应用程序我的第一个 Java 项目包括接管由我所在公司的一个部门编写的一个门户,该部门现在已经关闭了。当我凝视着运行门户代码的服务器终端时,我看到一行接一行的调试代码涌现在在屏幕上。进一步的研究之后,我发现 JavaServer Pages ( JSP )和 servlet 中

数据就是一切 1164

STM32F103xx / STM32F429VET6最小系统原理图

心血来潮想试一下STM32F4系列和F1系列在编程上有什么差别,手头没有开发板,本着能勤俭节约的原则自己先做一块看看能不能成,看了一下STM32F429VET6的芯片在F429xx中最便宜,对照着数据手册绘制了原理图画了PCB,目前打板中,焊接完如果跑不通回来修改文章。这里我们可以看到,VDD是标准工作电压,VDDA是模拟工作电压,且VDDA必须与VDD等电位,VBAT是备份工作电压,一般接纽扣电池电源,如果存在VREF+引脚,则要求VDDA-VREF+ < 1.2V。截图下来比较糊,不知道为什么。

m0_51294753的博客 1万+

LabVIEW内存优化实战:用DVR和队列高效处理大型数组,告别数据副本

本文深入探讨LabVIEW内存优化技术,重点介绍数据值引用(DVR)和单元素队列(SEQs)在高效处理大型数组中的应用。通过对比传统方法与现代引用技术的性能差异,提供减少内存副本、提升程序效率的实战方案,帮助开发者在测试测量、图像处理等数据密集型场景中实现显著性能提升。

weixin_30835649的博客 1062

Java 平台调试架构( Java Platform Debugger Architecture , JPDA )

一直以为java调试是IDE一方的事,以为调试都是IDE自己实现的。知道看了篇文章后才知道不是这样子。http://www.eclipsezone.com/eclipse/forums/t53459.html 我们要调试一个java程序,我们需要在运行参数前加上 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=104...

ruruhuang 208

Openclaw 错误分析 与 解决方案 之:Selected model is at capacity. Try a different model, or wait and retry.

Openclaw 错误分析 与 解决方案 :Selected model is at capacity. Try a different model, or wait and retry.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 6422
上一篇: Java中抽象类和接口的区别
下一篇: Java Web三层架构的配置详解
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值