使用 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
    
  • 应用程序在您的断点处停止。