一、翻译
翻译自:
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)
标签:tracelogger,选项,TRACE,QNX,num,事件,常用命令,缓冲区 From: https://www.cnblogs.com/hellokitty2/p/17504005.html