5. Crashdump Viewer

5 Crashdump查看器

5.1介绍

Crashdump Viewer是一个基于WxWidget的工具,用于浏览Erlang崩溃转储。

5.2开始

启动Crashdump Viewer最简单的方法是使用cdv带有Erlang crashdump完整路径的shell脚本作为参数。该脚本位于privObserver应用程序的目录中。这将启动Crashdump Viewer GUI并加载指定的文件。如果未指定文件名,则会打开一个文件对话框,其中可以选择该文件。

在Windows下,批处理文件cdv.bat可以使用。

Crashdump Viewer也可以通过调用crashdump_viewer:start/0或从Erlang节点启动crashdump_viewer:start/1

5.3 gui

当Crashdump Viewer加载了一个crashdump时,会打开GUI主窗口。它包含标题栏、菜单栏、信息选项卡和状态栏。

标题栏显示当前加载的crashdump的名称。

菜单栏包含一个文件菜单和一个帮助菜单。从文件菜单中,可以加载新的故障转储或可以终止该工具。从“ 帮助”菜单中,可以打开本用户指南和ERTS应用程序中的“如何解释Erlang故障转储”一节。“如何解释Erlang崩溃转储”详细描述原始崩溃转储,并包含有关信息页面中每个字段的信息。“OTP联机文档中还提供了”如何解释Erlang崩溃转储“。

如果当前加载的转储被截断,窗口底部的状态栏会显示警告。

主窗口的中心区域包含信息选项卡。每个选项卡显示有关特定项目或项目列表的信息。点击标签标题选择一个标签。

从显示项目列表的选项卡(例如“ 进程”选项卡或“ 端口”选项卡)中,可以通过双击某一行或右键单击该行并从下拉菜单中选择一项来打开一个包含更多信息的新窗口。新窗口被称为细节窗口。可以为进程,端口,节点和模块打开详细信息窗口。

详细信息窗口中显示的信息可以包含进程或端口的链接。单击其中一个链接将打开相关流程或端口的详细信息窗口。如果进程或端口驻留在远程节点上,则没有信息可用。点击链接,然后显示一个对话框,您可以选择打开远程节点的详细信息窗口。

某些选项卡包含可以选择信息区域的子项目的左侧菜单。单击其中一行,信息显示在右侧信息区域中。

5.4 Tab含量

主窗口中的每个选项卡都包含一个信息页面。如果找不到某个项目的信息,则该页面为空。没有找到有关项目的信息的原因可能如下:

  • 它是一个从旧的OTP版本中转储出来的,其中没有写这个项目。

  • 该项目在系统失效时没有出现在系统中。

  • 转储被截断。在这种情况下,主窗口的状态栏中会显示一个警告。

即使存在关于项目的某些信息,如果转储源自旧的OTP版本,也可能有空字段。

-1任何字段中的值意味着“未知”,并且在大多数情况下,这意味着转储在该字段周围的某处被截断。

以下各节介绍了信息选项卡中的一些字段。这些是原始崩溃转储中不存在的字段,或者与原始崩溃转储中的字段有某些不同。有关其他字段的详细信息,请参阅ERTS User's Guide“如何解释Erlang故障转储”一节。该部分也可以从主窗口的帮助菜单中打开。以下部分还提供了“如何解释Erlang崩溃转储”中的相关信息。

5.5一般标签

Tab General显示转储的简短概述。

以下字段未在ERTS用户指南中描述:

Crashdump created on

失败的时间。

Memory allocated

分配的总字节数,相当于c:memory(total)

Memory maximum

在起始节点的生存期内分配的最大字节数。只有当Erlang运行时系统被检测时才会显示这一点。

Atoms

如果在转储中可用,则这是原子表中的原子总数。如果原子表的大小不可用,则显示转储中可见的原子数。

Processes

转储中可见的进程数。

ETS tables

转储中可见的ETS表数。

Funs

在转储中可见的函数数量。

有关详细信息,请参阅General InformationERTS中的“如何解释Erlang故障转储”一节。

5.6进程选项卡

Tab Processes显示crashdump中找到的所有进程的列表,包括有关每个进程的简要信息。默认情况下,这些进程按其pid排序。要按另一个主题排序,请单击所需的列标题。

Column Memory显示添加到Erlang/OTP R16B01故障转储中的'Memory'字段。这是进程使用的内存总量。对于早期版本的故障转储,此列显示“堆栈+堆”字段。该值始终以字节为单位。

要查看有关特定进程的详细信息,请双击列表中的行,或右键单击该行并选择<pid>的属性。

有关详细信息,请参阅Process Information在ERTS中的“如何解释Erlang崩溃转储”一节中。

5.7端口标签

选项卡端口与“ 进程”选项卡相似,只是它列出了故障转储中找到的所有端口

要查看有关特定端口的更多详细信息,请双击该行或右键单击该行并为<端口>选择属性。在右键菜单中,您还可以选择<pid>的属性,其中<pid>是连接到端口的进程。

有关详细信息,请参阅Port InformationERTS中的“如何解释Erlang故障转储”一节。

5.8 ETS表格标签

选项卡ETS表格显示转储中找到的所有ETS表格信息。Id与原始崩溃转储中的“表”字段相同。内存是原始崩溃转储翻译成字节的'字段'字段。对于树表,“对象”字段中没有值。

要打开有关表格的详细信息页面,请双击,或右键单击该行并选择“标识符”的属性

要打开有关ETS表所有者进程的详细信息页面,请右键单击该行并选择<pid>的属性。

有关详细信息,请参阅ETS TablesERTS中的“如何解释Erlang故障转储”一节。

5.9计时器标签

标签计时器显示转储中找到的所有计时器信息。

要打开关于定时器所有者进程的详细信息页面,请右键单击该行并选择<pid>的属性。

双击定时器选项卡无效。

有关详细信息,请参阅TimersERTS中的“如何解释Erlang故障转储”一节。

5.10调度程序标签

选项卡计划程序显示转储中找到的所有计划程序信息。

要打开关于调度程序的详细信息页面,请双击,或右键单击该行并选择“标识符”的属性

有关详细信息,请参阅Scheduler InformationERTS中的“如何解释Erlang故障转储”一节。

5.11 Funs Tab

Tab Funs显示转储中找到的所有函数信息。

要打开函数所属模块的详细信息页面,请右键单击该行并选择<mod>的属性。

双击Funs选项卡中的某一行不起作用。

有关详细信息,请参阅Fun InformationERTS中的“如何解释Erlang故障转储”一节。

5.12原子标签

标签原子列出转储中找到的所有原子。默认情况下,原子按照创建顺序从第一个到最后一个进行排序。这与原始的crashdump相反,原子从最后到第一个列出,这意味着如果转储在原子列表中间被截断,那么只有最后创建的原子Atoms标签中可见。

有关详细信息,请参阅AtomsERTS中的“如何解释Erlang故障转储”一节。

5.13节点标签

选项卡节点显示从故障转储中引用的所有外部Erlang节点的列表。

如果页面为空,则表示以下任一项:

  • 崩溃节点未分布。

  • 崩溃的节点是分布式的,但没有其他节点的引用。

  • 转储被截断。

如果节点是分布式的,则所有引用的节点都是可见的。列连接类型显示节点是否可见,隐藏或未连接。可见节点是活动节点,具有与起始节点的活动连接。隐藏节点与可见节点相同,除了它们是以标志开始的-hidden。未连接的节点是不再连接到始发节点的节点,但存在引用(即进程或端口标识符)。

要查看有关节点的更多详细信息,请双击该行,或右键单击该行并选择节点<节点>的属性。在右键菜单中,您还可以选择<端口>的属性,打开控制端口的详细信息窗口。

在节点的详细信息窗口中,显示始发节点和已连接节点上进程之间的所有现有链路和监视器。额外信息可以包含调试信息(即仿真器进行调试编译时写入的特殊信息)或错误信息。

有关详细信息,请参阅Distribution InformationERTS中的“如何解释Erlang故障转储”一节。

5.14模块标签

选项卡模块列出了在始发节点上加载的所有模块以及当前代码大小。如果旧代码存在,旧尺寸也会显示。

要查看有关特定模块的详细信息,请双击该行,或右键单击该行并选择<mod>的属性。

有关详细信息,请参阅Loaded Module InformationERTS中的“如何解释Erlang故障转储”一节。

5.15记忆体标签

标签内存显示内存和分配器信息。从左侧菜单中,您可以选择以下内容:

记忆

请参阅Memory InformationERTS中的“如何解释Erlang故障转储”一节。

分配器摘要

该页面显示其下所有分配器的值的摘要。

<Allocator>

每个分配器一个入口。请参阅AllocatorERTS中的“如何解释Erlang故障转储”一节。

分配区

请参阅Allocated AreasERTS中的“如何解释Erlang故障转储”一节。

5.16内表标签

在选项卡内部表中,您可以从左侧菜单中选择哈希表索引表内部ETS表

有关详细信息,请参阅Internal Table InformationERTS中的“如何解释Erlang故障转储”一节。