10.2. 使用 ltrace
要在您要分析的程序上运行 ltrace 工具:
scl enable devtoolset-9 'ltrace program argument...'
$ scl enable devtoolset-9 'ltrace program argument...'
使用您要分析的程序的名称替换 program,使用您要提供给该程序的任何命令行选项和参数替换 parameter。另外,您可以使用 the -p 命令行选项后跟进程 ID,在已经运行的进程上运行该工具:
scl enable devtoolset-9 'ltrace -p process_id'
$ scl enable devtoolset-9 'ltrace -p process_id'
请注意,您可以使用 scl 工具执行任何命令,从而导致它使用等效的 Red Hat Developer Toolset 二进制文件来运行它。这可让您默认使用 Red Hat Developer Toolset ltrace 运行 shell 会话:
scl enable devtoolset-9 'bash'
$ scl enable devtoolset-9 'bash'
验证您在任何时候使用的 ltrace 版本:
which ltrace
$ which ltrace
Red Hat Developer Toolset 的 ltrace 可执行路径以 /opt 开头。或者,您可以使用以下命令确认版本号与 Red Hat Developer Toolset ltrace 的版本号匹配:
ltrace -V
$ ltrace -V
10.2.1. 将输出重定向到文件 复制链接链接已复制到粘贴板!
默认情况下,ltrace 会打印每个系统调用的名称、其参数以及返回值到标准错误输出。要将此输出重定向到文件,请使用 -o 命令行选项,后跟文件名:
scl enable devtoolset-9 'ltrace -o file_name program argument...'
$ scl enable devtoolset-9 'ltrace -o file_name program argument...'
使用文件名替换 file_name。
例 10.1. 将输出重定向到文件
考虑来自 例 8.1 “使用调试信息编译 C 程序” 的 fibonacci 文件稍修改的版本。此可执行文件显示 Fibonacci 序列,并可选择指定要列出此序列的成员数量。在此文件中运行 ltrace 工具,并将 trace 输出重定向到 fibonacci.log :
scl enable devtoolset-9 'ltrace -o fibonacci.log ./fibonacci 20'
$ scl enable devtoolset-9 'ltrace -o fibonacci.log ./fibonacci 20'
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
这会在当前工作目录中创建一个名为 fibonacci.log 的新纯文本文件。
10.2.2. 追踪所选库调用 复制链接链接已复制到粘贴板!
要只跟踪所选库调用集合,请使用 the -e 命令行选项运行 ltrace 工具:
scl enable devtoolset-9 'ltrace -e expression program argument...'
$ scl enable devtoolset-9 'ltrace -e expression program argument...'
使用规则链替换 expression,用于指定要追踪的库调用。规则可以包含用来识别符号名称的模式(如 malloc 或 free)以及标识库 SONAME (如 libc.so)的模式。例如,要追踪对 malloc 和 free 功能的调用,但忽略由 libc 库完成的功能:
scl enable devtoolset-9 'ltrace -e malloc+free-@libc.so* program'
$ scl enable devtoolset-9 'ltrace -e malloc+free-@libc.so* program'
例 10.2. 追踪所选库调用
考虑 ls 命令。在此程序上运行 ltrace 工具,并只跟踪 opendir、readdir 和 closedir 功能调用:
有关可用过滤器表达式的详细描述,请参阅 ltrace(1)手册页。
10.2.3. 显示时间戳 复制链接链接已复制到粘贴板!
要用几小时、分钟和秒内精确的时间为 trace 加上前缀,请使用 the -t 命令行选项运行 ltrace 工具:
scl enable devtoolset-9 'ltrace -t program argument...'
$ scl enable devtoolset-9 'ltrace -t program argument...'
要也显示毫秒,请提供 -t 选项两次:
scl enable devtoolset-9 'ltrace -tt program argument...'
$ scl enable devtoolset-9 'ltrace -tt program argument...'
要使用执行相应系统调用所需的时间为每行添加前缀,请使用 the -r 命令行选项:
scl enable devtoolset-9 'ltrace -r program argument...'
$ scl enable devtoolset-9 'ltrace -r program argument...'
例 10.3. 显示时间戳
考虑 pwd 命令。在此程序上运行 ltrace 工具,并在输出中包括时间戳:
10.2.4. 显示概述 复制链接链接已复制到粘贴板!
要显示执行每个系统调用所需的时间以及执行这些系统调用的次数,请使用 the -c 命令行选项运行 ltrace 工具:
scl enable devtoolset-9 'ltrace -c program argument...'
$ scl enable devtoolset-9 'ltrace -c program argument...'
例 10.4. 显示概述
考虑 lsblk 命令。在此程序上运行 ltrace 工具并显示追踪概述: