10.2. 使用 ltrace


要在您要分析的程序上运行 ltrace 工具:

$ scl enable devtoolset-9 'ltrace program argument...'
Copy to Clipboard Toggle word wrap

使用您要分析的程序的名称替换 program,使用您要提供给该程序的任何命令行选项和参数替换 parameter。另外,您可以使用 the -p 命令行选项后跟进程 ID,在已经运行的进程上运行该工具:

$ scl enable devtoolset-9 'ltrace -p process_id'
Copy to Clipboard Toggle word wrap

请注意,您可以使用 scl 工具执行任何命令,从而导致它使用等效的 Red Hat Developer Toolset 二进制文件来运行它。这可让您默认使用 Red Hat Developer Toolset ltrace 运行 shell 会话:

$ scl enable devtoolset-9 'bash'
Copy to Clipboard Toggle word wrap
注意

验证您在任何时候使用的 ltrace 版本:

$ which ltrace
Copy to Clipboard Toggle word wrap

Red Hat Developer Toolset 的 ltrace 可执行路径以 /opt 开头。或者,您可以使用以下命令确认版本号与 Red Hat Developer Toolset ltrace 的版本号匹配:

$ ltrace -V
Copy to Clipboard Toggle word wrap

10.2.1. 将输出重定向到文件

默认情况下,ltrace 会打印每个系统调用的名称、其参数以及返回值到标准错误输出。要将此输出重定向到文件,请使用 -o 命令行选项,后跟文件名:

$ scl enable devtoolset-9 'ltrace -o file_name program argument...'
Copy to Clipboard Toggle word wrap

使用文件名替换 file_name

例 10.1. 将输出重定向到文件

考虑来自 例 8.1 “使用调试信息编译 C 程序”fibonacci 文件稍修改的版本。此可执行文件显示 Fibonacci 序列,并可选择指定要列出此序列的成员数量。在此文件中运行 ltrace 工具,并将 trace 输出重定向到 fibonacci.log

$ 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
Copy to Clipboard Toggle word wrap

这会在当前工作目录中创建一个名为 fibonacci.log 的新纯文本文件。

10.2.2. 追踪所选库调用

要只跟踪所选库调用集合,请使用 the -e 命令行选项运行 ltrace 工具:

$ scl enable devtoolset-9 'ltrace -e expression program argument...'
Copy to Clipboard Toggle word wrap

使用规则链替换 expression,用于指定要追踪的库调用。规则可以包含用来识别符号名称的模式(如 mallocfree)以及标识库 SONAME (如 libc.so)的模式。例如,要追踪对 mallocfree 功能的调用,但忽略由 libc 库完成的功能:

$ scl enable devtoolset-9 'ltrace -e malloc+free-@libc.so* program'
Copy to Clipboard Toggle word wrap

例 10.2. 追踪所选库调用

考虑 ls 命令。在此程序上运行 ltrace 工具,并只跟踪 opendirreaddirclosedir 功能调用:

$ scl enable devtoolset-9 'ltrace -e opendir+readdir+closedir ls'
ls->opendir(".")     = { 3 }
ls->readdir({ 3 })   = { 61533, "." }
ls->readdir({ 3 })   = { 131, ".." }
ls->readdir({ 3 })   = { 67185100, "BUILDROOT" }
ls->readdir({ 3 })   = { 202390772, "SOURCES" }
ls->readdir({ 3 })   = { 60249, "SPECS" }
ls->readdir({ 3 })   = { 67130110, "BUILD" }
ls->readdir({ 3 })   = { 136599168, "RPMS" }
ls->readdir({ 3 })   = { 202383274, "SRPMS" }
ls->readdir({ 3 })   = nil
ls->closedir({ 3 })  = 0
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
+++ exited (status 0) +++
Copy to Clipboard Toggle word wrap

有关可用过滤器表达式的详细描述,请参阅 ltrace(1)手册页。

10.2.3. 显示时间戳

要用几小时、分钟和秒内精确的时间为 trace 加上前缀,请使用 the -t 命令行选项运行 ltrace 工具:

$ scl enable devtoolset-9 'ltrace -t program argument...'
Copy to Clipboard Toggle word wrap

要也显示毫秒,请提供 -t 选项两次:

$ scl enable devtoolset-9 'ltrace -tt program argument...'
Copy to Clipboard Toggle word wrap

要使用执行相应系统调用所需的时间为每行添加前缀,请使用 the -r 命令行选项:

$ scl enable devtoolset-9 'ltrace -r program argument...'
Copy to Clipboard Toggle word wrap

例 10.3. 显示时间戳

考虑 pwd 命令。在此程序上运行 ltrace 工具,并在输出中包括时间戳:

$ scl enable devtoolset-9 'ltrace -tt pwd'
13:27:19.631371 __libc_start_main([ "pwd" ] <unfinished ...>
13:27:19.632240 getenv("POSIXLY_CORRECT")                        = nil
13:27:19.632520 strrchr("pwd", '/')                              = nil
13:27:19.632786 setlocale(LC_ALL, "")                            = "en_US.UTF-8"
13:27:19.633220 bindtextdomain("coreutils", "/usr/share/locale") = "/usr/share/locale"
13:27:19.633471 textdomain("coreutils")                          = "coreutils"
(...)
13:27:19.637110  exited (status 0)
Copy to Clipboard Toggle word wrap

10.2.4. 显示概述

要显示执行每个系统调用所需的时间以及执行这些系统调用的次数,请使用 the -c 命令行选项运行 ltrace 工具:

$ scl enable devtoolset-9 'ltrace -c program argument...'
Copy to Clipboard Toggle word wrap

例 10.4. 显示概述

考虑 lsblk 命令。在此程序上运行 ltrace 工具并显示追踪概述:

$ scl enable devtoolset-9 'ltrace -c lsblk > /dev/null'
% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
 53.60    0.261644      261644         1 __libc_start_main
  4.48    0.021848          58       374 mbrtowc
  4.41    0.021524          57       374 wcwidth
  4.39    0.021409          57       374 __ctype_get_mb_cur_max
  4.38    0.021359          57       374 iswprint
  4.06    0.019838          74       266 readdir64
  3.21    0.015652          69       224 strlen
...
------ ----------- ----------- --------- --------------------
100.00    0.488135                  3482 total
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat