精华内容
下载资源
问答
  • Tomcat远程调试的方法(Tomcat与JDPA)

    千次阅读 2017-02-24 12:50:59
    一、远程调试的战略目标  伴随系统上线后,由于服务器操作权限没有面向系统设计人员开放,只能通过系统的操作日志以及错误日志来分析性能以及错误处理。但是有时候,由于错误信息没有针对性就给系统设计人员分析...

    一、远程调试的战略目标
          伴随系统上线后,由于服务器操作权限没有面向系统设计人员开放,只能通过系统的操作日志以及错误日志来分析性能以及错误处理。但是有时候,由于错误信息没有针对性就给系统设计人员分析问题带来了难度与不便,如果系统设计人员能够对已经上线部署在远程端面Java虚拟机后端的系统进行实时调试的情况下,该问题将变得迎刃而解,我要激动的说一声,那都不是事!
          正巧我对Tomcat的构架有着极其深厚的兴趣,早在2006年就开始参考HowTomcatWorks文献等资料结合Tomcat的源代码在始终在研究Tomcat工作的基本构架到现在已经有5个年头了。也是期盼能够设计出一个类似于该容器的构架。
    步入正题,如何远程调试Tomcat。通过博客以及相关社区查了一些资料,相关的文章还是很多的。我简单梳理了一下解决方案及原理,以便日后作为参考,顺便分析一下Tomcat的启动脚本。大量的文章都介绍了JPDA,那么我也从此入手解开谜底。
    二、JPDA概要
          1. JPDA(Java Platform Debugger Architecture,Java平台调试架构) ,由Java虚拟机后端和调试平台前端组成, JPDA为Java平台上的调试器定义了一个标准的体系结构。该体系结构包括3个主要组成部分:JVM TI(Java虚拟机工具接口)、JDI(Java调试连线协议)和JDWP(Java调试接口)。
          2. JVM TI(JavaVirtualMachineToolInterface),它定义了JVM为了支持调试而必须提供的功能及相应的访问接口。包括调试信息(Information譬如栈信息)、调试行为(Action譬如客户端设置一个断点)和通知(Notification譬如到达某个断点时通知客户端),该接口由虚拟机实现者提供实现,并结合在虚拟机中。
    这些访问接口是以本地语言的形式提供的,由JVM负责实现。这里有个理解上得难度,JVM负责实现是怎么回事?我的理解是JVM TI只是JVM提供的一系列函数,JVM TI就是在桌子上的苹果菠萝,他告诉我们你可以吃苹果菠萝,可是你进不去房间,只能依靠一个服务人员来取,那么你要吃什么,怎么吃呢?他不管。那谁来管?谁来调用他谁就来管呗?JVM TI的直接客户端并不是调试器,而是 “JPDA back-end”,属于JVM的一部分,在SUN JRE的bin目录下可以找到jdwp.dll(jdwp.so)的库文件。这就是JPDA back-end的实现。也就是说JPDA back-end提供了各种访问方式,吃的方式(共享内存,Socket),通过这些方式接收调试器的请求,然后调用JVM TI接口,他来决定你怎么吃。
          3. JDI(Java Debug Interface),在语言的高层次上定义了调试者可以使用的调试接口以能方便地与远程的调试服务进行交互,它定义了访问JVM TI接口的高层API,以纯Java语言实现,调试器实现者可直接使用该接口访问虚拟机调试服务。调试器直接使用JDI来实现调试的功能。与JPDA back-end相对应,JDI实现的角色就是JPDA front-end。如同上面的例子,JDI就是桌子和那个服务员,提供了访问的平台,通道。
          4. JDWP(Java Debug Wire Protocol),它定义了JPDA front-end和JPDA back-end之间通讯信息的二进制格式。这里的通讯信息主要包括两种:调试器发送给JVM的请求信息和JVM发送给调试器的调试信息。调试服务和调试器之间的通信,包括定义调试信息格式和调试请求机制。就是你要吃什么?请求是什么、你得告诉服务员你要什么,不过这个服务员是个老毛子,你得跟翻译说你的请求,翻译帮你规范你的语言,命令他才明白。
          5. 阶段目标达到!Okey。我来总结一下吧,本地调试器 调用JDK提供的JDI实现 (JPDA front-end),经由JDWP协议 ,和JVM自带的JPDA back-end (jdwp.dll, jdwp.so, ...)进行通讯。JPDA back-end 通过调用JVM TI接口 ,从而获知调试信息,或发送控制命令。然后,JPDA back-end 将调试信息或命令执行结果,通过JDWP协议 ,返回给本地调试器 。呵呵有点乱,那么我举个傻瓜和女孩的例子。有一天一个可爱的女孩(本地调试器)来到一家餐厅Java,这家酒店的经理叫做JPDA,安排女孩到JDI包房,并安排傻瓜JPDA back-end服务女孩。傻瓜JPDA back-end拿来了菜单JDWP,女孩没有看菜单JDWP就告诉傻瓜JPDA back-end要吃苹果,傻瓜JPDA back-end说苹果是个神马东西,菜单JDWP没有!并威胁说小心黑社会Error来。女孩害怕了,NND进了黑店了。没办法只能够按照菜单JDWP来点菜了。点菜后,傻瓜JPDA back-end将厨师JVM TI叫来了JPDA包房做饭告诉女孩我们不是黑店,我们是有原则协议的!厨师大哥终于做好了,并由JPDA back-end,按照菜单JDWP交给女孩。这么说就清晰明了了。呵呵!
          6. 在深入一点,我们来看看他的运行方式,那么就能分析清楚了,当虚拟机的调试服务运行时,虚拟机作为调试的服务提供端,监听一个连接,而调试器通过该连接与虚拟机进行交互。目前,Windows平台的JVM提供了两种方式的连接:共享内存和 Socket连接,共享内存的服务提供端和调试端只能位于同一台机,而Socket连接则支持不同异机调试,即远程调试。哈哈,来吧,实践才是王道啊

     

    三、第一步:启动tomcat的jpda支持
          1.虚拟机参数设置
             1.1启用调试服务
               -Xdebug 启用调试
               -Xrunjdwp:<sub-options> 加载JVM的JPDA参考实现库
             1.2 Xrunjdwp子参数(sub-options)配置
               Xrunjdwp子参数的配置格式如下
               Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
             1.3 transport=dt_socket
               JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。
             1.4 address=8000
               JVM在8000端口上监听请求。
             1.5 server=y
               y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。
             1.6 suspend=y
               y表示启动的JVM会暂停等待,直到调试器连接上。
               suspend=y这个选项很重要。如果你想从Tomcat启动的一开始就进行调试,那么就必须设置suspend=y。
          2. 配置:

    -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>是可用的共享内存

     

          3. Tomcat的启动脚本 
          只要Tomcat启动时,启用了JPDA,那么就可以被调试。而Tomcat默认是不启用JPDA的,需要我们手动开启。开启JPDA的方法也很简单,对Tomcat的启动脚本做点修改,把启动JPDA的命令行参数添加进去,就可以了。
              3.1 Windows环境的启动
                在Tomcat发行版的bin目录下,有N多脚本,其中与Tomcat启停有关的脚本是:
                startup.bat //启动Tomcat
                shutdown.bat //停止Tomcat
                catalina.bat //包含启动/停止Tomcat的核心逻辑
                startup.bat和shutdown.bat都是通过调用catalina.bat来实现启动和停止的功能,因此他俩的代码都很少。主要的逻辑都在catalina.bat中。
                catalina.bat是个强大的脚本,通过参数,可以执行各种动作,包括debug run start stop version等。
    如果我们直接执行catalina.bat,就可以看到它的用法说明:



                startup.bat,其实就是执行catalina.bat start;shutdown.bat,其实就是执行catalina.bat stop。
    不难猜到,我们可以写一个jdpa.bat,直接调用catalina.bat jpda start,应该就可以启用JPDA。我们拷贝一份startup.bat,把下面这行
                call "%EXECUTABLE%" start %CMD_LINE_ARGS%
                      修改成
                call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

                不过,-Xdebug -Xrunjdwp:transport=dt_socket, address=5050,server=y,suspend=y,这些选项参数怎么传递给catalina.bat呢?
                看看catalina.bat前面的注释,server的值默认就是y,transport的值是变量 JPDA_TRANSPORT,address的值是变量JPDA_ADDRESS,suspend的值是变量JPDA_SUSPEND 。如果没有显式地复制,这些变量的值默认是dt_shmem jdbconn n(默认值表示使用共享内存作为传输方式)。这些默认值不是我们需要的,Eclisep的远程调试目前只支持套接字传输。在调用catalina.bat jpda start之前,我们给这些变量设置恰当的值:
                set JPDA_TRANSPORT=dt_socket
                set JPDA_ADDRESS=5050
                set JPDA_SUSPEND=y
                call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

                创建jpda.bat,复制startup.bat修改文件名称为japa.bat。之后,将以上4行代码复制到新建成的japa.bat最后部分,哈哈这样我们就成功建立了一个jpda的批处理!
                然后,直接执行jpda.bat,Tomcat就运行在JPDA可调式模式下:

     

              从上图可以看出,Tomcat的JPDA使用套接字传输,监听在5050端口。Tomcat的启动已经暂停,只有调试器连接上来,才会继续启动。
    我把jpda.bat的完整内容列在下面,其中黑体部分,在startup.bat基础上添加的代码:

    @echo off
    if "%OS%" == "Windows_NT" setlocal
    rem Guess CATALINA_HOME if not defined
    set CURRENT_DIR=%cd%
    if not "%CATALINA_HOME%" == "" goto gotHome
    set CATALINA_HOME=%CURRENT_DIR%
    if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHome
    cd ..
    set CATALINA_HOME=%cd%
    cd %CURRENT_DIR%
    :gotHome
    if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHome
    echo The CATALINA_HOME environment variable is not defined correctly
    echo This environment variable is needed to run this program
    goto end
    :okHome
    set EXECUTABLE=%CATALINA_HOME%/bin/catalina.bat
    rem Check that target executable exists
    if exist "%EXECUTABLE%" goto okExec
    echo Cannot find %EXECUTABLE%
    echo This file is needed to run this program
    goto end
    :okExec
    rem Get remaining unshifted command line arguments and save them in the
    set CMD_LINE_ARGS=
    :setArgs
    if ""%1""=="""" goto doneSetArgs
    set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
    shift
    goto setArgs
    :doneSetArgs
    set JPDA_TRANSPORT=dt_socket
    set JPDA_ADDRESS=5050
    set JPDA_SUSPEND=y
    call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%
    :end_
     


             3.2 Linux环境的启动
                在Linux系统中已经Tomcat已经配置了Jpda,可是啊,默认情况下tomcat的启动命令是: ./catalina.sh start 但是这个命令是没有启动我们的jpda这个服务。
                我们需要启动jpda服务,好在tomcat提供了集成化的命令:./catalina.sh jpda start,这样就启动了我们服务器jvm的jpda服务了。tomcat默认的jpda服务的端口是8000,这个时候我们使用命令看下 netstat -an,看看8000端口是不是已经启动了。如果我们想修改端口该如何呢?呵呵,经过分析我们知道Jpda的工作细节,那么也像Windows环境的启动一样
                我们将
                      export JPDA_ADDRESS=8000
                修改为
                      export JPDA_ADDRESS=5050

                由于没有服务器权限,就委托运维部代我部署了一下,已经成功测试。


    四、第二步:在Eclipse中远程调试Tomcat 
          首先将Tomcat的源代码分为container、connectors、jasper、servletapi 、build五个项目,导入到Eclipse中。启动相关的代码主要在container中,就以它为当前项目,打开”Debug Configurations“对话框。
    然后创建一个”Remote Java Application“,Connection Type选择”Standard (Socket Attach)“,Host填写localhost(Tomcat所在的主机地址),Port填写5050。最后点击”Apply“保存。

     



          首先确保已经执行了jpda.bat,Tomcat正在等待调试器连接;然后执行上述的Debug Configuration,Eclipse就可以连上Tomcat。
          Tomcat的启动是从Bootstrap的main方法开始,我在登陆代码处设置了断点,Tomcat的启动就停在了这一行:




    PS:如果在配置的时候有什么问题,欢迎大家联系,并且指正不足与错误。

    展开全文
  • Tomcat 远程调试

    2013-11-25 23:31:17
    1:Tocat配置 修改bin/startup.sh脚本 [color=red] exec "$PRGDIR"/"$EXECUTABLE" start "$@"[/color] 修改为: [color=red] exec "$PRGDIR"... 添
    1:Tocat配置
    
    修改bin/startup.sh脚本
    [color=red] exec "$PRGDIR"/"$EXECUTABLE" start "$@"[/color]
    修改为:
    [color=red] exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"[/color]
    修改bin/catalina.sh
    添加或修改
    [color=red]JPDA_ADDRESS=8085[/color]
    2:Eclipse配置
    修增加一个 remote java application 配置对应的端口和IP
    展开全文
  • 远程调试,特别是当你在本地开发的...此篇是Intellij IDEA远程调试的教程汇总和原理解释,知其然而又知其所以然。 本机Intellij IDEA远程调试配置 1,打开Inteliij IDEA,顶部菜单栏选择Run-> Edit Configurat...


       远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用。

      JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过接口的协议联系,本地的Java文件在远程JVM建立联系和通信。此篇是Intellij IDEA远程调试的教程汇总和原理解释,知其然而又知其所以然。

     
    本机Intellij IDEA远程调试配置

    1,打开Inteliij IDEA,顶部菜单栏选择Run-> Edit Configurations,进入下图的运行/调试配置界面。

    二,服务器端开启调试模式,增加JVM启动参数,以支持远程调试
      服务器端的catalina.sh文件,在Tomcat的安装目录下,复制到本地,进行编辑,在第一行添加参数配置如下,完成后粘贴回去。

    文本:

    CATALINA_OPTS="-Xdebug  -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5000"
      

    配置添加之后,重启tomcat即可生效(shutdown.sh /startup.sh)。到此,开始远程调试。

    三, Intellij IDEA 启动远程调用
    最后,打开IDEA,程序上打上断点,运行模式选远程,点击运行。调用服务器端运行的系统程序,系统自动进入断点,下面的图表示远程调试运行成功

    展开全文
  • 淘宝tomcat远程调试

    2017-01-17 15:04:10
    操作篇主要目的是提供一套环境给大家做远程debug用,远程tomcat上已经启用调试模式,大家用eclipse或idea配置下远程连接即可,具体步骤如下: 在EDAS上应用名为”测试“下找到bak应用,IP地址是10.168.86.158的那个...

    操作篇

    主要目的是提供一套环境给大家做远程debug用,远程tomcat上已经启用调试模式,大家用eclipse或idea配置下远程连接即可,具体步骤如下:

    1. 在EDAS上应用名为”测试“下找到bak应用,IP地址是10.168.86.158的那个(内网地址),在bak上部署你要debug的应用,重启即可;

    2. 在eclipse里配置远程debug,如下:
      这里写图片描述
      Host里写bak应用的外网IP,就能连接上去了,如果连接失败,有以下几种可能:
      1) bak应用服务器上7070端口并没有启动成功,请在bak上执行netstat -anop | grep 7070 看下7070启动成功与否,如果没有启动成功,重启下bak再看下;
      2) 如果7070端口已经启动成功了,你还是远程连接不上去,有可能是其他同学已经远程连到bak上去了,在群里吼下问下

    3. 此时你的eclipse已经远程连接到bak应用上去了,但是你的请求并没有发到bak上去,比如你用模拟登陆页面请求mocklogin,这时请求是发到线上的鉴权中心服务器的,那么如果才能发到bak上面来呢?在本地改下hosts文件即可,将你要请求的域名和bak应用对应的负载均衡的外网IP映射下,如下是windows下的hosts文件:
      这里写图片描述
      记得要重启下机器,不然hosts文件修改不生效

    4. 这时你在浏览器里的请求就会被发到bak对应的负载均衡器,然后到bak应用,你就可以远程debug啦。

    原理篇

    之所以能远程debug,就是使用的tomcat的原生特性,本来在startup.sh里直接改./catalina.sh start为./catalina.sh jpda start就OK了,但是EDAS不是调用startup.sh启动,而是直接使用catalina.sh start,无奈只得修改catalina.sh,在开头加上一行如下:

    JAVA_OPTS=”$JAVA_OPTS
    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7070”

    展开全文
  • java远程debug调试tomcat

    万次阅读 2017-03-01 14:40:07
    JVM原理 众所周知,Java由于引入了虚拟机JVM,拥有了很好的跨平台和安全性,.java文件由Javac编译成.class文件也叫字节码文件,字节码文件由...远程调试很有用,特别是当你的开发环境在Window,又在远端Linux Se
  • JAVA(TOMCAT远程调试

    2021-02-12 23:43:02
    当我们的项目部署到远程机器(开发环境和部署环境在不同的jvm下)中,而远程机器的数据和本地有可能不一样,这个时候我们可能需要连接到远程机器进行调试。为了解决这一问题,JAVA为我们提供了Java平台调试架构(Java ...
  • Java远程调试原理是两个JVM之间通过Debug协议(JDWP)进行通信,然后以达到远程调试的目的。通讯方式为socket,所以会看到transport=dt_socket的配置 JDWP是Java Debug Wire Protocol的缩写。The JavaTM Debug Wire ...
  • 深入 java debug 原理远程remote调试详解

    千次阅读 多人点赞 2019-08-06 16:32:50
    Java远程调试原理是两个VM之间通过debug协议进行通信,然后以达到远程调试的目的,两者之间可以通过socket进行通信 调试体系JPDA JPDA(Java Platform Debugger Architecture)是 sun 公司开发的 java平台调试...
  • Mac下IDEA+Tomcat远程调试

    千次阅读 2017-09-09 11:01:56
    java远程调试原理是两个VM之间通过debug协议进行通信,然后以达到远程调试的目的。两者之间可以通过socket进行通信。 Java远程调试原理是两个VM之间通过debug协议进行通信,然后以达到远程调试的目的。两者...
  • 前言 以前有篇文章,讲解Tomcat开启远程调试功能,只是讲解了用法,以及Tomcat的作者书写脚本的初衷。原理没写,其实不是Tomcat的具有远程调试功能,是JVM虚拟机提供的能力。
  • 这部分主要讲,如何开启tomcat远程调试,并佐以实例。本文方式适用于windows和linux。 假设有两台机器,A是tomcat服务器所在机器,B是IDE安装机器。A和B可以是同一台机器,通常A是测试环境,B是开发环境。 简洁...
  • Eclipse+Tomcat远程调试

    2014-05-14 16:52:06
    当项目在服务器上单独部署的时候没有,...这时候就用到了Tomcat远程调试 JVM的JPDA框架。而Tomcat默认是不启用JPDA的,需要我们手动开启。  废话不说了,简单介绍一下配置Tomcat的步骤 在windows系统中:
  • 问题:tomcat远程debug 解决:只需要修改一个地方 在tomcat的bin下修改startup.bat (linux即startup.sh) ,在最后一个start前加上jpda 保存 ok了   然后启动tomcat就可以了 调试:打开eclipse 然后在...
  • IDEA 2019 远程调试Tomcat具体配置步骤

    千次阅读 2019-10-16 14:11:54
    有时候web应用在运行过程中通过日志无法查找到问题,为了便于定位和解决已经部署在服务器中的web应用,Tomcat提供了远程Debug调试功能,使用IDEA配置后即可通过本地代码远程调试服务器上的Web应用。本文主要通过自己...
  • 本地配置tomcat调试 idea开启tomcat远程debug
  • Java 远程调试原理

    2020-11-24 16:49:38
    远程调试原理 Java 程序是运行在Java 虚拟机(JVM )上的,Java程序统一以字节码的形式在JVM中运行, 因为都是类字节码文件,只要本地代码和远程服务器上的类文件相同,两个JVM通过调试协议进行通信, 被调试的...
  • IDEA如何进行远程调试

    2021-02-23 18:28:39
    IDEA如何进行远程调试环境原理需要修改的内容步骤修改项目运行配置修改tomcat启动配置防火墙开放调试端口测试题外话 环境 Win10 + IDEA2021.1.4 CentOS7 + tomcat9.0.43 我对springboot项目打了war包,有版本依赖:...
  • Eclipse远程调试Tomcat

    2017-03-06 17:57:16
     最近,一直在研究Tomcat的工作内幕,主要的方法就是参考《How Tomcat Works》 这本书和Tomcat 5.5.26的源代码。...如果能对Tomcat的启动、处理请求和停止的过程进行断点调试,看清Tomcat的每一步行踪,那么就
  • 这篇文章主要介绍了java进行远程部署与调试及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下远程调试,特别是当你在本地开发的时候,你需要调试服务器...
  • Eclipse+Tomcat远程调试配置

    千次阅读 2012-02-13 14:18:02
    最近,一直在研究Tomcat的工作内幕,主要的方法就是参考《How Tomcat Works》 这本书和Tomcat 5.5.26的源代码。   Tomcat的代码结构还是比较清晰的,注释也比较全。但是代码毕竟是静态的,难以彻底弄清类与类之间...
  •  客户的应用部署在武汉的服务器上,技术支持在上海,现在客户的服务器上出了问题,根据日志找了半天没找到,于是想到远程调试,当然要在vpn上 解决办法:  tomcat配置 /bin/catalina.sh 里添加 JPDA_TRANSPORT=...
  • 远程调试原理Java调试器架构Tomcat 服务器配置方式Jetty配置配置参数拓展注:服务器代码最好和本地调试端代码保持一致 为什么需要这么做? 解决 在我本地是好的啊 这个世界性难题~ 测试环境碰到问题,直接连上...
  • 远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常...此篇是Intellij IDEA远程调试的教程汇总和原理解释,知其然而又知其所以然。远程部署点击1.本机Intellij IDEA远程调试配...
  • 调试步骤 将项目打包,部署到服务器上,并使用对应虚拟机的参数启动jar包. java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 /home/test/teset.jar 如果你的项目使用了项目内的...
  • 远程调试Tomcat,本质上就是远程调试JVM。倒不是需要了解JVM自身的运行细节,而是要了解JVM上应用程序的运行细节。 无论如何,我们都要获取JVM运行时的内部信息(比如查看调试信息),并对JVM的运行流程进行...
  • IDEA 远程调试

    2020-08-20 14:46:22
    远程调试原理 本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。 被调试程序的远程虚拟机:作为 Debug 服务端,监听 Debug 调试指令。jdwp是Java Debug Wire Protocol的...
  • 漏洞描述 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向...Apache Tomcat 7.0.0 to 7....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,965
精华内容 3,586
关键字:

tomcat远程调试原理