查看源代码 崩溃转储查看器
简介
崩溃转储查看器是一个基于 WxWidgets 的工具,用于浏览 Erlang 崩溃转储文件。
入门
启动崩溃转储查看器的最简单方法是使用 shell 脚本 cdv
,并将 Erlang 崩溃转储文件的完整路径作为参数。该脚本位于 Observer 应用程序的 priv
目录中。这将启动崩溃转储查看器 GUI 并加载指定的文件。如果未指定文件名,则会打开一个文件对话框,可以在其中选择文件。
在 Windows 下,可以使用批处理文件 cdv.bat
。
也可以通过调用 crashdump_viewer:start/0
或 crashdump_viewer:start/1
从 Erlang 节点启动崩溃转储查看器。
GUI
当崩溃转储查看器加载了崩溃转储文件时,会打开 GUI 主窗口。它包含一个标题栏、一个菜单栏、信息标签页和一个状态栏。
标题栏显示当前加载的崩溃转储文件的名称。
菜单栏包含一个文件菜单和一个帮助菜单。从文件菜单中,可以加载新的崩溃转储文件或终止该工具。从帮助菜单中,可以打开本用户指南以及 ERTS 应用程序中的“如何解释 Erlang 崩溃转储”部分。“如何解释 Erlang 崩溃转储”详细描述了原始崩溃转储文件,并包含有关信息页面中每个字段的信息。“如何解释 Erlang 崩溃转储”也可在 OTP 在线文档中找到。
窗口底部的状态栏会在当前加载的转储文件被截断时显示警告。
主窗口的中心区域包含信息标签页。每个标签页显示有关特定项目或项目列表的信息。单击标签页标题以选择标签页。
从显示项目列表的标签页中,例如,进程标签页或端口标签页,可以通过双击某一行或右键单击该行并从下拉菜单中选择一个项目来打开一个包含更多信息的新窗口。新窗口称为详细信息窗口。可以为进程、端口、节点和模块打开详细信息窗口。
详细信息窗口中显示的信息可能包含指向进程或端口的链接。单击其中一个链接会打开相关进程或端口的详细信息窗口。如果进程或端口位于远程节点上,则没有可用信息。单击链接后,会显示一个对话框,您可以在其中选择打开远程节点的详细信息窗口。
一些标签页包含一个左侧菜单,可以在其中选择信息区域的子项。单击其中一行,信息将显示在右侧的信息区域中。
标签页内容
主窗口中的每个标签页都包含一个信息页面。如果未找到某个项目的信息,则页面为空。找不到项目信息的原因可能是以下几点:
- 它是来自旧 OTP 版本的转储文件,其中未写入此项目。
- 该项目在发生故障时不存在于系统中。
- 转储文件被截断。在这种情况下,主窗口的状态栏中会显示警告。
即使存在有关某个项目的一些信息,如果转储文件来自旧 OTP 版本,也可能存在空字段。
任何字段中的值 -1
表示“未知”,并且在大多数情况下,它表示转储文件在靠近该字段的位置被截断。
以下部分描述了信息标签页中的一些字段。这些字段在原始崩溃转储文件中不存在,或者在某些方面与原始崩溃转储文件中的字段不同。有关其他字段的详细信息,请参阅 ERTS 用户指南中的“如何解释 Erlang 崩溃转储”部分。该部分也可以从主窗口的帮助菜单中打开。以下部分也有链接指向“如何解释 Erlang 崩溃转储”中的相关信息。
常规标签页
常规标签页显示了转储文件的简短概述。
以下字段未在 ERTS 用户指南中描述:
崩溃转储创建于
- 发生故障的时间。已分配内存
- 已分配的总字节数,相当于c:memory(total)
。最大内存
- 在原始节点的生命周期内已分配的最大字节数。仅当 Erlang 运行时系统以检测模式运行时才会显示此项。原子
- 如果在转储文件中可用,这是原子表中原子的总数。如果原子表的大小不可用,则会显示转储文件中可见的原子数。进程
- 转储文件中可见的进程数。ETS 表
- 转储文件中可见的 ETS 表的数量。函数
- 转储文件中可见的函数的数量。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分的 常规信息。
进程标签页
进程标签页显示了在崩溃转储文件中找到的所有进程的列表,包括有关每个进程的简要信息。默认情况下,进程按其 pid 排序。要按其他主题排序,请单击所需的列标题。
内存列显示了在 Erlang/OTP R16B01 中添加到崩溃转储的“内存”字段。这是进程使用的内存总量。对于来自早期版本的崩溃转储文件,此列显示“堆栈+堆”字段。该值始终以字节为单位。
要查看有关特定进程的详细信息,请双击列表中的行,或右键单击该行并选择<pid> 的属性。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分的 进程信息。
端口标签页
端口标签页与进程标签页类似,只不过它列出了在崩溃转储文件中找到的所有端口。
要查看有关特定端口的更多详细信息,请双击该行或右键单击该行并选择<port> 的属性。从右键单击菜单中,您还可以选择<pid> 的属性,其中 <pid>
是连接到端口的进程。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分的 端口信息。
ETS 表标签页
ETS 表标签页显示了在转储文件中找到的所有 ETS 表信息。Id 与原始崩溃转储文件中的“表”字段相同。内存是原始崩溃转储文件中“字”字段转换为字节后的值。对于树表,“对象”字段中没有值。
要打开有关该表的详细信息页面,请双击或右键单击该行并选择“标识符”的属性。
要打开有关 ETS 表的所有者进程的详细信息页面,请右键单击该行并选择<pid> 的属性。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分的 ETS 表。
定时器标签页
定时器标签页显示了在转储文件中找到的所有定时器信息。
要打开有关定时器的所有者进程的详细信息页面,请右键单击该行并选择<pid> 的属性。
双击定时器标签页中的行无效。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分的 定时器。
调度器标签页
调度器标签页显示了在转储文件中找到的所有调度器信息。
要打开有关调度器的详细信息页面,请双击或右键单击该行并选择“标识符”的属性。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分的 调度器信息。
函数标签页
函数标签页显示了在转储文件中找到的所有函数信息。
要打开有关函数所属模块的详细信息页面,请右键单击该行并选择<mod> 的属性。
双击函数标签页中的行无效。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分的 函数信息。
原子标签页
原子标签页列出了在转储文件中找到的所有原子。默认情况下,原子按创建顺序从第一个到最后一个排序。这与原始崩溃转储文件相反,在原始崩溃转储文件中,原子从最后一个到第一个列出,这意味着如果转储文件在原子列表的中间被截断,则只有最后创建的原子在原子标签页中可见。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分的 原子。
节点标签页
节点标签页显示了从崩溃转储文件中引用的所有外部 Erlang 节点的列表。
如果页面为空,则表示以下任一情况:
- 崩溃的节点未分配。
- 崩溃的节点是分布式的,但没有引用其他节点。
- 转储已截断。
如果节点是分布式的,则所有被引用的节点都是可见的。连接类型列显示节点是可见的、隐藏的还是未连接的。可见节点是与源节点具有活动连接的活动节点。隐藏节点与可见节点相同,只是它们是以 -hidden
标志启动的。未连接的节点是不再与源节点连接的节点,但引用(即进程或端口标识符)仍然存在。
要查看有关节点的更详细信息,请双击该行,或者右键单击该行并选择节点 <node> 的属性。从右键单击菜单中,您还可以选择<端口> 的属性,以打开控制端口的详细信息窗口。
在节点的详细信息窗口中,将显示源节点上的进程与连接的节点之间存在的任何链接和监视器。额外信息可能包含调试信息(即,如果仿真器是以调试编译方式编译的则会写入特殊信息)或错误信息。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分中的分布信息。
模块标签页
模块选项卡列出加载在源节点上的所有模块以及当前代码大小。如果存在旧代码,则还会显示旧大小。
要查看有关特定模块的详细信息,请双击该行,或者右键单击该行并选择<mod> 的属性。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分中的加载的模块信息。
内存标签页
内存选项卡显示内存和分配器信息。从左侧菜单中,您可以选择以下选项
内存 - 请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分中的内存信息。
分配器摘要 - 此页面提供了其下所有分配器的值摘要。
<分配器> - 每个分配器一个条目。请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分中的分配器。
已分配区域 - 请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分中的已分配区域。
内部表格标签页
在内部表格选项卡上,您可以从左侧菜单中选择哈希表、索引表或内部 ETS 表。
有关详细信息,请参阅 ERTS 中“如何解释 Erlang 崩溃转储”部分中的内部表格信息。