QNX-8—QNX常用命令—tracelogger

发布时间 2023-06-25 21:35:32作者: Hello-World3

一、翻译

翻译自:
QNX Software Development Platform --> Utilities & Libraries --> Utilities Reference --> T
https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/t/tracelogger.html

将跟踪信息记录到事件文件中

(1) 您必须是 root 才能运行此实用程序。
(2) 为了记录跟踪事件,您的系统必须运行 procnto 的检测版本(即 procnto*-instr)。 在 QNX Neutrino 7.0 或更高版本中,我们仅提供检测版本。


1. 语法:

tracelogger [-acEPRrw] [-A attribute] [-b num] [-D seconds]
            [-d mode] [-F num] [-f file] [-k num]
            [-M -S size] [-n num] [-p addr] [-s num] [-v[v...]]


2. 运行于:

QNX Neutrino

 

3. 选项

-A attribute

指定要添加到log的属性。 该属性的格式为 name=value,其中名称和值是任意字符串。

您不能在名称或值中使用以下内容:

::
TRACE_
=

如果这样做,tracelogger 将打印一条消息并忽略该属性。

您可以使用此选项一次或多次来添加信息来标识您正在记录的场景。 例如:

tracelogger -s1 -A MACHINE_NAME=tx86_64 -A PERIOD=1s

-A

(QNX Neutrino 7.0 或更高版本)启用安全类事件。

-b num

在 tracelogger 中分配的动态缓冲区的最大数量; 默认值为 64。每个缓冲区的大小约为 11 KB。

-C

以连续模式运行; 默认是以迭代模式运行。 该选项相当于-n0。

-D seconds

启用内核事件的定期刷新(默认为关闭)。

-d1

(“One”)以所谓的守护进程模式启动。 此选项使 Tracelogger 被动运行,将跟踪控制权留给您的应用程序; 它实际上并不使 tracelogger 作为守护进程运行。

-d1 选项不配置事件或日志记录持续时间。 要使能事件,请使用 -E 选项。######## 或者,使用 TraceEvent() 调用来启用特定事件。 要配置日志记录持续时间,请使用 -c、-s 或 -n。 默认值为-n32。#######

-E

使能事件,即使您在守护程序模式下运行 tracelogger 。

-f file

用于存储记录事件的文件的名称。默认为 /dev/shmem/tracebuffer.kev。 如果文件是连字符 (-),则记录的事件将流式传输到 stdout(但是是二级制的,没法看)。 如果文件名为使用 mkfifo() 或 mkfifo 实用程序创建的现有 FIFO 特殊文件,则记录的事件将流式传输到 FIFO。

-F num

过滤不同的num值,如下:

0: 不要设置任何过滤。

1: 禁用内核调用类。

2: 禁用中断类。

3: 禁用进程类。

4: 禁用线程类。

5: 禁用 VThread 类。

6: 禁用通信类。

7: 禁用系统类。

您可以使用多个 -F 选项指定多个过滤器。 例如,要禁用 Interrupt 类和 VThread 类,请指定 -F2 -F5。 有关这些类的更多信息,请参阅系统分析工具包用户指南的"Events and the Kernel"一章。

-k num

在内核中分配的缓冲区数量; 默认值为 32。每个缓冲区的大小约为 16 KB。

-M

直接映射日志文件而不是写入。 如果使用此选项,日志文件必须位于共享内存中,并且必须使用 -S 选项指定最大文件大小。

-n num_buffers

迭代模式下填充的缓冲区数量。 默认为32; 指定 0 表示无限次迭代。

-P

将内核检测缓冲区保留在 /dev/shmem 中的共享内存块中。 如果指定此选项,那么当 tracelogger 退出时,它不会释放内核缓冲区内存; 然后,您可以在后续运行中指定 -R 选项,以使跟踪记录器重用相同的缓冲区,而无需重新分配内存。

-p addr

指定用于内核缓冲区的物理内存的地址。

-R

重用之前使用 -P 选项时创建的内核检测缓冲区。 如果没有可重用的缓冲区,tracelogger 将照常分配内核缓冲区。

-r
以环形模式记录事件(即不刷新它们)。 默认为线性模式(已填充的缓冲区将立即刷新)。

-s num

记录的秒数。 默认值为 0,指定无限的持续时间。

-S size

日志文件的最大大小。 使用 M 表示兆字节,使用 K 表示千字节。 如果不使用 M 或 K,则假定单位为字节。 如果使用 -M 选项,则必须指定此选项。

-v[v...]

冗长; 更多 v 字符会导致更多冗长。

-w

记录广泛的事件; 默认是记录快速事件。 有关详细信息,请参阅 System Analysis Toolkit User's Guide 的 “Events and the Kernel” 一章中的“Fast and wide modes”。


4. 描述

tracelogger服务从检测的内核 (procnto*-instr) 接收事件,并将它们保存在文件或设备上以供以后分析。 默认情况下,tracelogger 将事件保存在 /dev/shmem/tracebuffer.kev 中。 .kev 扩展名是“kernel events”的缩写; 可在集成开发环境中的系统分析器中打开具有此扩展名的文件。


(1) 一次仅运行一个 tracelogger 实例。 同样,不要同时运行 tracelogger 和使用 "qconn"(在IDE 的控制下)来跟踪事件。
(2) 在 QNX Neutrino 7.0 或更高版本中,我们要求硬件底层 ClockCycles() 在 SMP 系统上的所有处理器之间同步。 如果时钟不同步,则跟踪记录器会生成时间戳不一致的数据,并且 IDE 将无法加载跟踪文件。 IDE 尝试对跟踪文件中的事件进行正确排序,如果时间戳数据不正确,则可能会出错。

Traceprinter” 实用程序对于此类跟踪没有任何问题,因为它不会尝试重新排序数据并解释它; 它只是转储每个事件的内容。

您可以在以下模式下运行tracelogger:

-----------------------------------------------------------------------------------
Mode                         Option    The kernel:            tracelogger:
-----------------------------------------------------------------------------------
Continuous                   -C        Logs events            捕获事件,并继续这样做直到终止
Daemon                       -d1       Doesn't log events     被动等待
Iterations (the default)     -n        Logs events            捕获 num_buffers 的数据然后终止
Ring                         -r        Logs events            在收到 SIGINT 信号或应用程序调用 TraceEvent(_NTO_TRACE_STOP) 之前不会捕获事件
Time-based                   -s        Logs events            捕获指定秒数的事件
-----------------------------------------------------------------------------------

在 Daemon 守护程序模式下,日志记录会在应用程序调用 TraceEvent(_NTO_TRACE_START) 时启动,并持续到应用程序调用 TraceEvent(_NTO_TRACE_STOP)、日志记录持续时间到期(-c、-s 或 -n)或终止跟踪记录器。

当您在 Ring 环形模式下终止跟踪时,tracelogger 会停止记录事件,然后短暂重新启动并再次停止,以便它可以捕获 _NTO_TRACE_START 命令发出的状态信息。 此信息包括线程 ID 和进程名称。

如果您没有使用 daemon 守护进程模式,或者您使用带有 -E 选项的 daemon 守护进程模式,则 tracelogger:

(1) 清除任何现有的过滤。
(2) 启用所有类别中的所有事件。
(3) 过滤您使用任何 -F 选项指定的类。
(4) 如果您指定了 -a 选项(QNX Neutrino 7.0 或更高版本),则会添加安全类事件。
(5) 如果指定 -w 选项,则切换到记录广泛事件

这是配置跟踪的最简单方法。 在这种情况下,tracelogger 除了将跟踪缓冲区保存到文件系统的正常任务之外,还执行仪器模块的所有初始化和运行时控制。 如果您使用守护程序模式,您的应用程序需要调用 TraceEvent() 来开始捕获跟踪事件。

为了更精细(更灵活)地控制检测,请在守护程序模式下运行不带 -E 选项的 Tracelogger,并从应用程序中调用 TraceEvent() 来指定要跟踪的内容以及何时启动和停止跟踪。 除了指定缓冲区的数量之外,tracelogger 不执行检测模块的任何初始化,其几乎唯一的任务是将“接收到的”跟踪事件记录到文件系统。


如果应用程序调用了 TraceEvent(_NTO_TRACE_START),然后您尝试启动 tracelogger,则 tracelogger 可能会失败并显示“resource busy”消息。 为了帮助避免这种情况:

(1) 在应用程序发出 _NTO_TRACE_START 或 _NTO_TRACE_STARTNOSTATE 命令之前启动跟踪记录器。
(2) 不要无限期地进行跟踪; 请务必在每个 _NTO_TRACE_START 或 _NTO_TRACE_STARTNOSTATE 命令后发出 _NTO_TRACE_STOP。########


5. 例子

以宽模式启动 tracelogger,并在控制台屏幕上显示运行信息; 将记录的数据存储在指定文件中,并在 12 个跟踪缓冲区已满时停止记录:

tracelogger -f /dev/shmem/my_tracebuffer.kev -n 12 -w

使用 5 个内部缓冲区以环形模式启动 tracelogger,并等待异步信号(例如 Ctrl–C)来停止它:

tracelogger -r -b 5

在守护程序模式下运行 tracelogger ,直到发出 _NTO_TRACE_STOP。 使能所有事件、log wide事件并过滤掉 Interrupt 类中的事件:

tracelogger -d1 -c -E -w -F2

 

6. 退出状态

-1:发生错误。


7. 错误:

严重错误会导致 tracelogger 终止。

 

相关概念
System Analysis Toolkit User's Guide

相关参考
procnto*
qconn
traceprinter
TraceEvent() (QNX Neutrino C Library Reference)