strace应该如何使用?

新手上路,请多包涵

一位同事曾经告诉我,当在 Linux 上调试一切都失败时,最后一个选择是使用 strace

我试图学习这个奇怪工具背后的科学,但我不是系统管理员,我并没有真正得到结果。

所以,

  • 它到底是什么,它有什么作用?
  • 应该如何以及在哪些情况下使用它?
  • 应该如何理解和处理输出?

简而言之, _简单来说_,这些东西是如何工作的?

原文由 e-satis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 922
2 个回答

Strace 概述

strace 可以看作是一个轻量级的调试器。它允许程序员/用户快速了解程序如何与操作系统交互。它通过监视系统调用和信号来做到这一点。

用途

当您没有源代码或不想被打扰真正阅读它时很有用。

此外,如果您不想打开 GDB,但只想了解外部交互,这对您自己的代码很有用。

不错的小介绍

下面是使用strace调试进程挂起的简单介绍: strace介绍

原文由 John Mulder 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题