一位同事曾经告诉我,当在 Linux 上调试一切都失败时,最后一个选择是使用 strace 。
我试图学习这个奇怪工具背后的科学,但我不是系统管理员,我并没有真正得到结果。
所以,
- 它到底是什么,它有什么作用?
- 应该如何以及在哪些情况下使用它?
- 应该如何理解和处理输出?
简而言之, _简单来说_,这些东西是如何工作的?
原文由 e-satis 发布,翻译遵循 CC BY-SA 4.0 许可协议
简而言之,strace 跟踪程序发出的所有系统调用及其返回码。考虑诸如文件/套接字操作之类的事情以及更多晦涩的事情。
如果您对 C 有一定的应用知识,这是最有用的,因为这里的系统调用将更准确地代表标准 C 库调用。
假设您的程序是 /usr/local/bin/cough。只需使用:
strace /usr/local/bin/cough <any required argument for cough here>
或者
strace -o <out_file> /usr/local/bin/cough <any required argument for cough here>
写入“out_file”。
所有 strace 输出都将转到 stderr(请注意,它的庞大数量通常要求重定向到文件)。在最简单的情况下,您的程序将因错误而中止,您将能够在 strace 输出中看到它与操作系统的最后一次交互在哪里。
更多信息应通过以下方式获得:
man strace
原文由 bltxd 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答1.3k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答941 阅读✓ 已解决
1 回答749 阅读✓ 已解决
1 回答1.6k 阅读
1 回答904 阅读✓ 已解决
2 回答689 阅读
Strace 概述
strace 可以看作是一个轻量级的调试器。它允许程序员/用户快速了解程序如何与操作系统交互。它通过监视系统调用和信号来做到这一点。
用途
当您没有源代码或不想被打扰真正阅读它时很有用。
此外,如果您不想打开 GDB,但只想了解外部交互,这对您自己的代码很有用。
不错的小介绍
下面是使用strace调试进程挂起的简单介绍: strace介绍