首页 > 解决方案 > 使用 IntelliJ 调试混淆的应用程序

问题描述

我有多个模块的项目,每个模块都由 API 和实现 jar 组成。我们使用 Proguard 来混淆这个 jars。现在我们想调试混淆的 jar 以找出应用程序的问题。基本上,我们只遇到了一些奇怪的问题,只有经过混淆的 jar。

标签: javadebuggingintellij-ideaproguardobfuscation

解决方案


我们可以通过以下步骤实现调试

Proguard 设置

  • 在混淆期间定义映射文件(-printmapping application.map)

  • 在混淆过程中保留 SourceFile 和 LineNumberTable 信息

    -renamesourcefileattribute SourceFile
    -keepattributes  SourceFile,LineNumberTable
    

智能

  • 创建一个空的 Java 项目

  • 右键单击项目并打开模块设置-> 库

  • 将所有混淆的库 jar 添加到项目中

  • 从映射文件 (application.map) 中找出要放置断点的类名

  • 在 IntelliJ 中打开混淆类并添加断点

  • 创建新的远程调试配置 IntelliJ 远程调试

  • 使用调试参数启动应用程序

      "C:/Program Files 
      (x86)/Java/jre8/bin/java.exe"  - 
       agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
    
  • 应用程序在您的断点处停止。


推荐阅读