kdump.1

KDUMP(1)

KDUMP(1)

FreeBSD General Commands Manual

KDUMP(1)

kdump

显示内核跟踪数据

kdump [-dEnlHRSsTA] [-f trfile] [-m maxdata] [-p pid] [-t trstr]

kdump 命令以人类可读的格式显示使用 ktrace(1) 生成的内核跟踪文件。 默认显示当前目录下的文件 ktrace.out 。

选项如下:

-d

以十进制显示所有数字。

-E

显示经过的时间戳(自跟踪开始以来的时间)。

-f trfile

显示指定的文件而不是 ktrace.out 。

-H

列出每个跟踪记录的线程 ID (tid)(如果有)。 如果没有可用的线程 ID,将打印 0。

-l

循环读取跟踪文件,一旦到达文件末尾,等待更多数据。

-m maxdata

解码 I/O 时最多显示 maxdata 字节。

-n

禁止临时翻译。 通常 kdump 会尝试将许多系统调用解码为更易于阅读的格式。 例如, ioctl(2) 值被替换为宏名称, errno 值被替换为 strerror(3) 字符串。 抑制此功能会产生更一致的输出格式,并且易于进行进一步处理。

-p pid

仅显示与进程或线程 pid 对应的跟踪事件。 当有多个进程或线程记录在同一个跟踪文件中时,这可能很有用。

-R

显示相对时间戳(自上次输入以来的时间)。

-r

解码 STRU 记录时,显示 UID、GID、日期等结构成员。 符号而不是数字。

-S

显示系统调用号码。

-s

禁止显示 I/O 数据。

-T

显示每个条目的绝对时间戳(自纪元以来的秒数)。

-A

显示被跟踪进程的 ABI 描述。

-t trstr

请参阅 ktrace(1) 的 -t 选项。

kdump 的输出格式是面向行的,有几个字段。 下面的示例显示了由以下命令生成的 kdump 的一部分:

?> ktrace echo "ktrace" ?> kdump 85045 echo CALL writev(0x1,0x804b030,0x2) 85045 echo GIO fd 1 wrote 7 bytes "ktrace " 85045 echo RET writev 7

第一个字段是被跟踪进程的 PID。 第二个字段是被跟踪程序的名称。 第三个字段是内核代表进程执行的操作。 如果正在打印线程 ID,则会在 PID 字段和程序名称字段之间的输出中添加一个额外的线程 ID 列。

在上面的第一行中,内核代表进程执行 writev(2) 系统调用,因此这是一个 CALL 操作。 第四个字段显示已执行的系统调用,包括其参数。 writev(2) 系统调用接受一个文件描述符,在本例中为 1,或标准输出,然后是一个指向要写入的 iovector 的指针,以及要写入的 iovector 的数量。 在第二行中,我们看到操作是 GIO, 用于一般 I/O,文件描述符 1 写入了 7 个字节。 接下来是写入的七个字节,即带有回车和换行符的字符串 “ktrace” 。 最后一行是 RET 操作,显示来自内核的返回,我们从哪个系统调用返回,以及进程收到的返回值。 writev(2) 系统调用写入了七个字节,因此返回值是 7。

可能的操作是:

Name

Operation

Fourth field

CALL

进入系统调用

系统调用名称和参数

RET

从系统调用返回

系统调用名称和返回值

NAMI

文件名查找

文件路径

GIO

通用 I/O

fd,读/写,字节数

PSIG

信号

信号名称、处理程序、掩码、代码

CSW

上下文切换

停止/恢复用户/内核 wmesg

USER

来自用户进程的数据

the 数据

STRU

各种系统调用

结构体

SCTL

sysctl(3) 请求

MIB 名称

PFLT

进入页面错误

故障地址和类型

PRET

从页面错误返回

故障结果

ktrace(1)

kdump 命令出现在 4.4BSD 中。

March 28, 2014

FreeBSD 13.1-RELEASE

最后更新于

FreeBSD 中文社区