IDEA远程调试Docker中的Jar包

IDEA远程调试Docker中的Jar包

一直以来遇到Jar包的调试和反编译问题都有点搞心态,总是在逃避这个问题,但是不解决问题就会停滞不前,因此今天有空研究了一下这个问题。

Jar包调试原理

  • JDI:Java调试接口
  • JDWP:Java调试网络协议

调试过程如下:

  1. 建立Socket连接
  2. IDEA将断点信息通过JDWP协议传递给JVM的JDI接口,JVM遇到断点会挂起
  3. JVM挂起后将信息返回给IDEA,然后继续运行Java程序

IDEA调试过程

Docker配置

以Vulhub中Shiro的CVE-2020-1957为例,

原始的docker-compose.yml

1
2
3
4
5
6
version: '2'
services:
web:
image: vulhub/shiro:1.5.1
ports:
- "8080:8080"

可以看到程序只启动了8080端口,我们对其进行修改:

1
2
3
4
5
6
7
8
version: '2'
services:
web:
image: vulhub/shiro:1.5.1
ports:
- "8080:8080"
- "6666:6666" # 调试端口
command: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6666 -jar shirodemo-1.0-SNAPSHOT.jar

可以看到我们加了调试命令和端口

IDEA配置

我们需要下载Docker中的shirodemo-1.0-SNAPSHOT.jar,然后添加到IDEA的库中

image-20230922210115761

需要注意的是Vulhub中的Jar包有些区别,我们需要自己添加源代码的路径

image-20230922210556345

另外我们需要配置远程调试环境:

image-20230922210645065

最终效果:

image-20230922210755325

参考

https://blog.csdn.net/haduwi/article/details/126296308


IDEA远程调试Docker中的Jar包
https://d4wnnn.github.io/2023/09/22/Others/IDEA远程调试Docker中的Jar包/
作者
D4wn
发布于
2023年9月22日
许可协议