使用 jdb 调试 Java servlet。如何将 jdb 与 Tomcat 连接

Posted

技术标签:

【中文标题】使用 jdb 调试 Java servlet。如何将 jdb 与 Tomcat 连接【英文标题】:Debugging Java servlet with jdb. How to attach jdb with Tomcat 【发布时间】:2021-08-25 15:06:49 【问题描述】:

我在进行配置后运行了一个 tomcat,当我在终端中键入 jdb 时,它显示正在初始化。所以我想知道

    如何将 jdb 与 tomcat 连接并指定 servlet 名称。

    在使用javac 编译 servlet 时包含调试符号的编译选项是什么(例如在 C 中,例如 -g 和 gdb)

我有opt/tomcat/apache-tomcat-10.0.10 所以我猜Tomcat版本是10

【问题讨论】:

如何附加到 -> .class .o 【参考方案1】:

用于添加所有调试符号的javac 命令开关是...-g。默认情况下实际上添加了行号和源文件名,您只能获得有关局部变量的信息(请参阅this question)。

您无法将调试器连接到正在运行的 JVM,除非它是使用适当的命令行选项启动的(请参阅this question)。

Tomcat 有一个帮助脚本bin/catalina.sh 可以帮助您使用正确的参数启动它:

catalina.sh jpda start 在启用调试的情况下在后台启动 Tomcat。您可以通过以下方式连接到它:

jdb -attach localhost:8000

catalina.sh jpda run 与前一种情况一样,但在前台,

catalina.sh debug 通过jdb 启动Tomcat。您只需要使用run 来启动它。

连接后,您可以使用:

stop in <class id>.<method>

添加断点。

备注javacjdb 现在都不常用了。大多数人使用 Ant、Maven、Gradle 等工具来编译他们的项目和 IDE 来调试代码。

【讨论】:

以上是关于使用 jdb 调试 Java servlet。如何将 jdb 与 Tomcat 连接的主要内容,如果未能解决你的问题,请参考以下文章

解决JAVA单步调试键盘输入被JDB占用的问题

性能工具之Java调试工具JDB

Java逆向基础之JDB动态调试

jdb - The Java Debugger

性能工具之 Java 调试工具 JDB

java jdb命令详解