我需要调试我没有源代码的Java应用程序。它在Jetty服务器上本地运行。使用JD-GUI进行反编译工作正常。通过套接字连接或共享内存附加JDB也可以正常工作。
我失败的地方是将各个部分连在一起。我主要使用JD-Eclipse插件和远程调试来尝试Eclipse。我找不到将调试器成功附加到正在运行的进程的方法。一切似乎都假设我至少有部分应用程序可用作项目中的源代码,但我没有。它是一个相当大的应用程序(200多个MiB的JAR文件和500多个MiB的其他东西)所以试图从所有反编译的类构建一个项目并让它运行不是一个选项,除非它很容易自动化。 / p>
我真正需要的是能够将调试器附加到正在运行的进程,查看和导航反编译代码,设置断点并检查变量和对象。是否可以重新编译代码并不重要。有条件的断点和表达式评估会很好。
答案 0 :(得分:2)
你可以借助jd-eclipse及其扩展jd-eclipse重新调整片段的组合来做到这一点。
安装过程非常简单:
答案 1 :(得分:0)
这是一个可能的解决方案:
java -agentlib:jdwp=transport=dt_shmem,address=XXXXX,server=y,suspend=n -jar YourJar
jdb -attach XXXXX
stop at <TheClassName>:<ThePosition>
我会在有空的时候尝试它,如果可以的话会更新
我已经弄清楚了:
解压缩jar文件
jdb -sourcepath [未压缩的jar路径] -classpath [您的主类路径]
jdb初始化后执行:
stop at <package>.<yourclass>:<linenunmber>
run <your main class, for example org.springframework.boot.loader.JarLauncher>