分析外部堆栈跟踪
您可能需要分析他人收到的异常,以调查问题,例如死锁或无响应的用户界面。
使用 IntelliJ IDEA,您可以解码并查看异常堆栈跟踪或 完整线程转储。 在查看期间,您可以使用它们导航到源代码,就像它们来自 运行 或 调试 工具窗口一样。
安装 ZKM-Unscramble 插件
此功能依赖于 ZKM-Unscramble插件,您需要安装并启用。
按 Ctrl+Alt+S 打开设置,然后选择 。
打开 Marketplace 选项卡,找到 ZKM-Unscramble 插件,然后点击 安装 (如果提示,请重新启动 IDE)。
在 分析堆栈跟踪 对话框中打开后,将外部堆栈跟踪或线程转储粘贴到 请在此处放置堆栈跟踪或完整的线程转储: 文本区域中。
请指定是否需要解码堆栈跟踪。
要做到这一点,请选择 译码堆栈跟踪(U) 复选框,选择所需的 unscrambler 和日志文件。
如果堆栈跟踪文本在使用某些软件处理(例如,错误跟踪器或邮件客户端)后损坏(行被截断或换行,或太长等),请点击 标准化(N)。
如果您想显式指定包含相应 dSYM 文件的目录,请选择 使用附加目录搜索丢失的 dSYMs 复选框并在字段中输入所需的目录或从文件系统中选择。
点击 OK。 堆栈跟踪显示在 运行工具窗口中。
要跳转到导致问题的代码,请滚动到所需的堆栈跟踪行并点击源文件的链接。 文件在编辑器中打开。

线程名称旁边的图标表示线程的状态:
图标 | 描述 |
|---|---|
运行/活跃 — 默认状态,线程正在主动执行代码。 | |
(用于 Kotlin 协程)运行 — 协程正在主动执行代码。 | |
休眠 — 发生在线程处于 | |
承载线程 — 当前执行虚拟线程的平台线程,或处于 已创建/未知 状态的协程。 | |
| 等待 — 线程正在等待对象监视器,或协程已挂起时发生。 |
套接字 — 线程正在执行网络 I/O 操作时发生。 | |
I/O — 线程正在执行非网络 I/O 操作时发生。 | |
| EDT(事件分发线程)— Swing 应用中的 UI 线程。 |
在 运行 工具窗口中的某些调用具有虚线下划线。 这些调用发生在 try 块中,并可能抛出已检查异常。

"分析堆栈跟踪对话框"
使用此对话框可获取外部应用程序的可导航控制台堆栈跟踪。 从此堆栈跟踪中的每条消息,您都可以直接导航到导致报告问题的源代码。
条目 | 描述 |
|---|---|
译码堆栈跟踪(U) | 如您的源代码已被加扰,请选择此复选框来解扰外部堆栈跟踪。 |
译码器(S) | 在这里,您可以选择解码工具。 IntelliJ IDEA 自带 Zelix Klass Master 解码插件。 您可以开发自己的插件,以破解由任何其他混淆器处理的代码的堆栈跟踪。 |
日志文件: (L) | 请指定解码器日志文件的位置。 |
将一个堆栈跟踪或完整的线程转储放在此处 | 请在此处粘贴外部堆栈跟踪或线程转储。 |
自动检测并分析复制到 IntelliJ IDEA 外部剪贴板的线程转储 | 如果选中此复选框,IntelliJ IDEA 将监控和分析剪贴板的内容。 您只能选中此复选框一次,每次切换到 IntelliJ IDEA 时,您的剪贴板将被扫描。 一旦类似堆栈跟踪的内容被复制到剪贴板,IntelliJ IDEA 会在相应的工具窗口中显示此堆栈跟踪。 |
突出显示最近 <this_many> 天内更改的文件 | 选中此复选框以指定您想检查堆栈跟踪中最新更改的时间段。 默认时间周期设置为 31 天。 |
标准化(N) | 如果堆栈跟踪文本在使用某些软件(例如,bug 跟踪器或邮件客户端)处理后被损坏(行被截断或换行,或太长等),请点击此按钮以恢复正常的堆栈跟踪结构。 |