<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Strace</id>
	<title>Strace - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Strace"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Strace&amp;action=history"/>
	<updated>2026-06-30T11:48:12Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Strace&amp;diff=175270&amp;oldid=prev</id>
		<title>imported&gt;世界晚安：​/* growthexperiments-addlink-summary-summary:3|0|0 */</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Strace&amp;diff=175270&amp;oldid=prev"/>
		<updated>2026-03-23T09:06:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;growthexperiments-addlink-summary-summary:3|0|0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA&lt;br /&gt;
|G1 = IT&lt;br /&gt;
}}&lt;br /&gt;
{{Lowercase|strace}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;strace&amp;#039;&amp;#039;&amp;#039;是[[Linux]]環境下的一款程序[[调试工具]]，用來監察一個應用程序所使用的[[系統调用]]及它所接收的系統信息。&lt;br /&gt;
&lt;br /&gt;
== 用法及特性 ==&lt;br /&gt;
最常见的用途是使用strace启动程序，它会打印程序所调用的系统调用列表。这对于程序持续崩溃或行为不符合预期的情况非常有用：例如使用strace可能会显示程序正在尝试访问一个不存在或无法读取的文件。&lt;br /&gt;
&lt;br /&gt;
另一种应用是使用{{code|-p}}标志使之打印一个正在运行进程的系统调用。当一个进程停止响应，该方法可以用于揭示停止响应的原因：例如进程正在尝试进行网络连接时被阻塞。&lt;br /&gt;
&lt;br /&gt;
除此之外，strace还支持以下功能：&lt;br /&gt;
* 指定应该被追踪的系统调用名称的过滤器（通过&amp;lt;code&amp;gt;-e trace=option&amp;lt;/code&amp;gt;），过滤器可以是系统调用的名称（如{{Mono|clone, fork, vfork}}）、预定义的组（如{{Mono|%ipc}}或{{Mono|%file}}）或使用[[正则表达式]]语法（strace 4.17开始支持）（如&amp;lt;code&amp;gt;-e trace=/clock_.*&amp;lt;/code&amp;gt;）。&lt;br /&gt;
* 指定要被追踪的路径列表（如&amp;lt;code&amp;gt;-P /etc/ld.so.cache&amp;lt;/code&amp;gt;）。&lt;br /&gt;
* 指定应该被转储I/O的[[文件描述符]]列表（&amp;lt;code&amp;gt;-e read=&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;-e write=&amp;lt;/code&amp;gt;选项）。&lt;br /&gt;
* 计算系统调用执行时间和次数（&amp;lt;code&amp;gt;-T&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;-C&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;-w&amp;lt;/code&amp;gt;选项；&amp;lt;code&amp;gt;-U&amp;lt;/code&amp;gt;选项用于打印额外信息，比如最小和最大系统调用执行时间）。&lt;br /&gt;
* 打印相对或绝对时间戳（&amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt;选项）。&lt;br /&gt;
* 干扰正在执行的系统调用（&amp;lt;code&amp;gt;-e inject=&amp;#039;&amp;#039;syscall specification&amp;#039;&amp;#039;:&amp;#039;&amp;#039;tampering specification&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;选项）：修改指定系统调用的返回值（&amp;lt;code&amp;gt;:retval=&amp;lt;/code&amp;gt;；strace 4.16开始支持）和错误代码（&amp;lt;code&amp;gt;:error=&amp;lt;/code&amp;gt;；strace 4.15开始支持）、注入信号（&amp;lt;code&amp;gt;:signal=&amp;lt;/code&amp;gt;；strace 4.16开始支持）、延迟（&amp;lt;code&amp;gt;:delay_enter=&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;:delay_exit=&amp;lt;/code&amp;gt;；strace 4.22开始支持），并在其执行时修改由系统调用参数指向的数据（&amp;lt;code&amp;gt;:poke_enter=&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;:poke_exit=&amp;lt;/code&amp;gt;；strace 5.11开始支持）。&lt;br /&gt;
* 提取有关文件描述符的信息（包括套接字）（&amp;lt;code&amp;gt;-y&amp;lt;/code&amp;gt;选项；&amp;lt;code&amp;gt;-yy&amp;lt;/code&amp;gt;选项可以提供一些额外信息，比如套接字的端点地址，文件的路径和设备的主/次编号）。&lt;br /&gt;
* 打印堆栈信息（Stack traces），包括符号解缠（ symbol demangling，&amp;lt;code&amp;gt;-k&amp;lt;/code&amp;gt;选项；strace 4.21开始支持）。&lt;br /&gt;
* 按系统调用返回状态过滤（&amp;lt;code&amp;gt;-e status=option&amp;lt;/code&amp;gt;；strace 5.2开始支持）。&lt;br /&gt;
* 执行线程、进程、进程组和会话ID在跟踪中的翻译成strace的{{Link-en|PID命名空间|Linux_namespaces#Process_ID_(pid)}}（&amp;lt;code&amp;gt;--pidns-translation&amp;lt;/code&amp;gt;选项；strace 5.9开始支持）。&lt;br /&gt;
* 解码与进程、文件和描述符相关的[[SELinux]]上下文信息（&amp;lt;code&amp;gt;--secontext&amp;lt;/code&amp;gt;选项；strace 5.12开始支持）。&lt;br /&gt;
&lt;br /&gt;
strace支持解码某些类别的[[ioctl]]命令的参数，例如[[btrfs|BTRFS_*]]、[[Video4Linux|V4L2_*]]、{{Link-en|设备映射器|Device_mapper|DM_*}}、{{Link-en|Linux命名空间|Linux_namespaces|NSFS_*}}、[[存储器技术设备|MEM*]]、{{Link-en|Evdev|Evdev|EVIO*}}、[[Kernel-based Virtual Machine|KVM_*]]等；它还支持解码各种[[netlink]]协议。&lt;br /&gt;
&lt;br /&gt;
由于strace仅详细说明系统调用，因此它无法像代码调试器（如[[GNU Debugger|GDB]]）那样用于检测问题。然而，它比代码调试器更易于使用，对于[[系统管理员]]来说是非常有用的工具。研究人员还通过记录系统调用的信息来实现&amp;#039;&amp;#039;系统调用重放&amp;#039;&amp;#039;（System call replay）。&amp;lt;ref name=Horky13&amp;gt;{{cite web&lt;br /&gt;
| last = Horky&lt;br /&gt;
| first = Jiri&lt;br /&gt;
| year = 2013&lt;br /&gt;
| title = The ioapps IO profiler and IO traces replayer&lt;br /&gt;
| url = http://code.google.com/p/ioapps/&lt;br /&gt;
| accessdate = 2013-09-16&lt;br /&gt;
| archive-date = 2013-11-04&lt;br /&gt;
| archive-url = https://web.archive.org/web/20131104221635/http://code.google.com/p/ioapps/&lt;br /&gt;
| dead-url = no&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=Waterland07&amp;gt;{{cite web&lt;br /&gt;
|last = Waterland&lt;br /&gt;
|first = Amos&lt;br /&gt;
|year = 2007&lt;br /&gt;
|title = The sreplay system call replayer&lt;br /&gt;
|url = http://people.seas.harvard.edu/~apw/sreplay/&lt;br /&gt;
|accessdate = 2013-09-16&lt;br /&gt;
|archive-date = 2016-04-01&lt;br /&gt;
|archive-url = https://web.archive.org/web/20160401224445/http://people.seas.harvard.edu/~apw/sreplay/&lt;br /&gt;
|dead-url = no&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=Burton98&amp;gt;{{cite web&lt;br /&gt;
|last = Burton&lt;br /&gt;
|first = Ariel&lt;br /&gt;
|year = 1998&lt;br /&gt;
|title = Workload characterization using lightweight system call tracing and reexecution&lt;br /&gt;
|url = http://www.doc.ic.ac.uk/~phjk/Publications/WkldChctrsnUsngTracesReex.pdf&lt;br /&gt;
|accessdate = 2013-09-16&lt;br /&gt;
|archive-date = 2024-04-23&lt;br /&gt;
|archive-url = https://web.archive.org/web/20240423222705/https://www.doc.ic.ac.uk/~phjk/Publications/WkldChctrsnUsngTracesReex.pdf&lt;br /&gt;
|dead-url = no&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 示例 ==&lt;br /&gt;
以下是使用&amp;lt;code&amp;gt;strace&amp;lt;/code&amp;gt;命令的输出示例：&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
user@server:~$ strace ls&lt;br /&gt;
...&lt;br /&gt;
open(&amp;quot;.&amp;quot;, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3&lt;br /&gt;
fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0&lt;br /&gt;
fcntl64(3, F_GETFD)                     = 0x1 (flags FD_CLOEXEC)&lt;br /&gt;
getdents64(3, /* 18 entries */, 4096)   = 496&lt;br /&gt;
getdents64(3, /* 0 entries */, 4096)    = 0&lt;br /&gt;
close(3)                                = 0&lt;br /&gt;
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0&lt;br /&gt;
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000&lt;br /&gt;
write(1, &amp;quot;autofs\nbackups\ncache\nflexlm\ngames&amp;quot;..., 86autofsA&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;上面仅对在[[ls]]命令上运行时&amp;lt;code&amp;gt;strace&amp;lt;/code&amp;gt;的输出截取一小部分进行展示。该部分系统调用包括打开当前工作目录、检查并检索其内容、最终将文件名列表写入标准输出。&lt;br /&gt;
&lt;br /&gt;
==类似工具 ==&lt;br /&gt;
不同操作系统提供其他类似的调试工具。下面例举了一些类似的调试工具：&lt;br /&gt;
&lt;br /&gt;
* [[Linux]]提供[[ltrace]]命令，可以跟踪库调用，xtrace可以跟踪[[X Window]]程序，&amp;lt;ref&amp;gt;{{cite web |url=http://xtrace.alioth.debian.org/ |title=XTrace - trace X protocol connections |website=xtrace.alioth.debian.org |date= |accessdate=2014-08-12 |archive-date=2014-08-05 |archive-url=https://web.archive.org/web/20140805180608/http://xtrace.alioth.debian.org/ |url-status=dead }}&amp;lt;/ref&amp;gt;还有{{Link-en|SystemTap|SystemTap}}、[[perf]]，以及扩展{{Link-en|ftrace|ftrace}}的trace-cmd和KernelShark。&lt;br /&gt;
* [[AIX]]提供{{Link-en|truss (Unix)|truss (Unix)|truss}}命令。&lt;br /&gt;
* [[HP-UX]]提供Tusc命令。&lt;br /&gt;
* [[Solaris]] / [[Illumos]]有truss和{{Link-en|DTrace|DTrace}}。&lt;br /&gt;
* {{Link-en|UnixWare|UnixWare}}提供truss命令。&lt;br /&gt;
* [[FreeBSD]]提供truss命令、{{Link-en|Ktrace|Ktrace}}和DTrace。&lt;br /&gt;
* [[NetBSD]]提供Ktrace和DTrace。&lt;br /&gt;
* [[OpenBSD]]使用Ktrace和kdump。&lt;br /&gt;
* [[macOS]]提供Ktrace（10.4及更早版本），DTrace（来自Solaris）和在10.5及更高版本中提供的相关dtruss。&amp;lt;ref&amp;gt;{{cite web |url=https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dtrace.1.html |title=dtrace(1) Mac OS X Manual Page |publisher=Developer.apple.com |date= |accessdate=2014-07-23 |archive-date=2016-04-05 |archive-url=https://web.archive.org/web/20160405134400/https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dtrace.1.html |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Microsoft Windows]]有一个类似的工具称为StraceNT，由Pankaj Garg编写，&amp;lt;ref&amp;gt;{{cite web|url=http://intellectualheaven.com/default.asp?BH=StraceNT|title=IntellectualHeaven - Strace For Windows|work=intellectualheaven.com|accessdate=2015年1月29日|archive-date=2016年3月5日|archive-url=https://web.archive.org/web/20160305001814/http://intellectualheaven.com/default.asp?BH=StraceNT|url-status=dead}}&amp;lt;/ref&amp;gt;以及一个类似的[[GUI]]工具称为{{Link-en|Process Monitor|Process_Monitor}}，由[[Sysinternals]]开发。&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== 外部連結 ==&lt;br /&gt;
*[http://man7.org/linux/man-pages/man1/strace.1.html starce的幫助文件]{{Wayback|url=http://man7.org/linux/man-pages/man1/strace.1.html |date=20171113135255 }} {{en}}&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
* [[lsof (Unix)|lsof]]&lt;br /&gt;
* [[gdb]]&lt;br /&gt;
* [[Linux程式列表]]&lt;br /&gt;
&lt;br /&gt;
{{Linux-stub}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux软件]]&lt;br /&gt;
[[Category:除錯軟件]]&lt;/div&gt;</summary>
		<author><name>imported&gt;世界晚安</name></author>
	</entry>
</feed>