You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jdb调试Java Servlet:jdb附加Tomcat10及编译调试参数相关问题

解答

前置准备:开启Tomcat调试模式

要让jdb能附加到Tomcat进程,首先需要开启Tomcat的JPDA远程调试支持,操作步骤如下:

  • 进入Tomcat的bin目录:
    cd /opt/tomcat/apache-tomcat-10.0.10/bin
  • 如果Tomcat已经启动,先关闭现有进程:
    ./shutdown.sh
  • 以JPDA调试模式启动Tomcat:
    ./catalina.sh jpda start
    默认调试端口为8000,如需修改端口可以在启动前执行export JPDA_ADDRESS=0.0.0.0:自定义端口再执行启动命令。

1. jdb附加到Tomcat并调试指定Servlet

  • 执行附加命令连接Tomcat调试端口:
    jdb -attach 127.0.0.1:8000
    连接成功后会进入jdb交互终端。
  • 给目标Servlet设置断点:
    你需要提前知道目标Servlet的全限定类名和要调试的方法/行号,举例:
    • 方法断点:如果要在com.example.TestServlet的doGet方法入口断住,执行:
      stop in com.example.TestServlet.doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    • 行号断点:如果要在类的第30行断住,执行:
      stop at com.example.TestServlet:30
  • 触发Servlet执行:在浏览器或者用curl访问该Servlet对应的访问路径,jdb会自动停在你设置的断点位置,之后就可以用next(步过)、step(步入)、print 变量名(查看变量值)等常规jdb命令调试。

2. javac编译带调试符号的参数

和gcc的-g参数对应,javac添加调试符号的参数就是-g,该参数会生成包含行号、局部变量等完整调试信息的class文件。
手动编译Servlet的示例命令如下,注意要把Tomcat自带的servlet-api.jar加入classpath避免编译报错:
javac -g -cp /opt/tomcat/apache-tomcat-10.0.10/lib/servlet-api.jar 你的Servlet类名.java
如果使用构建工具:

  • Maven:在maven-compiler-plugin配置中设置<debug>true</debug>即可自动启用-g参数
  • Gradle:在compileJava任务中设置options.debug = true即可

内容的提问来源于stack exchange,提问作者user786

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:06:02