首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java远程调试,它在技术上是如何工作的?

Java远程调试,它在技术上是如何工作的?
EN

Stack Overflow用户
提问于 2010-08-29 00:25:18
回答 2查看 18.9K关注 0票数 71

我真的很喜欢JVM的远程调试功能。但我想知道它是如何在内部工作的。

我的假设是:它是通过JVM特性完成的,其中运行的进程正在从附加的远程调试器(如IDE)下载/使用源代码,它知道当前堆栈跟踪的行,然后可以跳到相应的IDE断点。然后,通过套接字或共享内存(设置远程调试器)完成堆栈跟踪和应用程序状态自省的通信。

有没有人有感兴趣的链接/资源?

EN

回答 2

Stack Overflow用户

发布于 2016-01-13 03:33:04

Eclipse调试从所谓的代理开始。

运行编译后的".class“源代码的JVM有一个特性,允许在运行时将外部库(用Java或C++编写)注入到JVM中。这些外部库称为代理,它们能够修改已运行的.class文件的内容。这些代理可以访问JVM的功能,这些功能不能从运行在JVM中的常规Java代码中访问,它们可以用来做一些有趣的事情,如注入和修改运行的源代码,分析等。一些工具,如JRebel(用于代码的热替换)利用这些功能来实现它们的魔力。

要将代理库传递给JVM,您可以通过启动参数,使用-

代码语言:javascript
复制
agentlib:libname[=options]

我们实际上将一个名为jdwp的代理库传递给运行Tomcat的JVM。jdwp是特定于JVM的JDWP (Java Debug Wire Protocol)的可选实现,用于定义调试器和正在运行的JVM之间的通信。它的实现(如果存在)以jdwp.so或jdwp.dll的形式作为JVM虚拟机的本地库提供

那么它能做什么呢?简而言之,我们传递的jdwp代理基本上是作为运行应用程序的JVM实例和调试器(可以位于远程或本地)之间的链接。由于它是一个代理库,因此它确实能够拦截正在运行的代码,在JVM和调试器之间创建一座桥梁,并在JVM上应用调试器的功能。由于在JVM体系结构中,调试功能不是在JVM本身内找到的,而是被抽象到外部工具(恰当地称为调试器)中,这些工具可以驻留在运行被调试的JVM的本地机器上,或者从外部机器运行。正是这种解耦的、模块化的体系结构使我们能够让JVM在远程机器上运行并使用JDWP,让远程调试器能够与其通信。

简而言之,这就是Eclipse调试器的工作方式。

票数 16
EN

Stack Overflow用户

发布于 2010-08-29 00:35:11

Java的调试架构称为JPDA。您可能想要阅读JPDA documentation。具体地说,Walk-through section给出了一个集成开发环境与JDI接口以获取堆栈上的值的示例。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3591497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档