使用 IntelliJ 调试混淆的应用程序
Debug obfuscated application with IntelliJ
我有一个包含多个模块的项目,每个模块都包含 API 和实现 jar。我们使用 Proguard 来混淆这个罐子。现在我们想调试混淆的 jar 以找出应用程序的问题。基本上我们只遇到混淆的 jar 的一些奇怪问题。
我们可以通过以下步骤实现调试
Proguard 设置
在混淆过程中定义映射文件(-printmapping application.map)
在混淆过程中保留 SourceFile 和 LineNumberTable 信息
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
IntelliJ
创建一个空的 Java 项目
右击项目&打开模块设置->库
将所有经过混淆的库 jar 添加到项目中
从映射文件 (application.map)
中找出要放置断点的 class 名称
在IntelliJ中打开混淆后的class并添加断点
创建一个新的远程调试配置
使用调试参数启动应用程序
"C:/Program Files
(x86)/Java/jre8/bin/java.exe" -
agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
应用程序在您的断点处停止。
我有一个包含多个模块的项目,每个模块都包含 API 和实现 jar。我们使用 Proguard 来混淆这个罐子。现在我们想调试混淆的 jar 以找出应用程序的问题。基本上我们只遇到混淆的 jar 的一些奇怪问题。
我们可以通过以下步骤实现调试
Proguard 设置
在混淆过程中定义映射文件(-printmapping application.map)
在混淆过程中保留 SourceFile 和 LineNumberTable 信息
-renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable
IntelliJ
创建一个空的 Java 项目
右击项目&打开模块设置->库
将所有经过混淆的库 jar 添加到项目中
从映射文件 (application.map)
中找出要放置断点的 class 名称在IntelliJ中打开混淆后的class并添加断点
创建一个新的远程调试配置
使用调试参数启动应用程序
"C:/Program Files (x86)/Java/jre8/bin/java.exe" - agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
应用程序在您的断点处停止。