【问题标题】:Strace Multithreaded ProgramStrace 多线程程序
【发布时间】:2012-05-26 05:15:35
【问题描述】:

在多线程程序上运行 strace 时,我得到如下结果:

[pid 14778] futex(0x7fd8082f266c, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x7fd8082f2668, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1} <unfinished ...>
[pid 14780] <... futex resumed> )       = 0

请注意,参数与&lt;unfinished...&gt; 位于同一行,而结果与&lt;...resumed&gt; 位于另一行。没有与结果相关的参数会降低 strace 的效用。跟踪多线程程序时,是否可以让 strace 在同一行打印结果和参数?

【问题讨论】:

  • 如果我使用 -ff -o 输出到文件,我可以获得我正在寻找的结果。但是,我更愿意将输出写入我的控制台,而不是一百个不同的文件。 :)
  • .. 但有一个时间顺序问题:特定的互斥操作确实在一个线程中开始,阻塞该线程,并导致另一个线程返回。
  • 我不介意它是否打印:syscall(args) = unfinished, resumed: syscall(args) = result。这没有时间顺序问题,我仍然可以将 args 与结果匹配。问题是它现在打印的第二行是 syscall(resumed) = result 这对我来说不是很有用。
  • 哦..我明白你在说什么。 futex 操作 :).. 真的这样做吗?阻塞一个线程并返回另一个线程?
  • 行首的“[pid number]”是不同的,所以它看起来像这样,对于互斥唤醒操作来说是有意义的。

标签: linux strace


【解决方案1】:

使用strace -ff cmd 2&gt; log.out

【讨论】:

  • 这对我不起作用。可能是因为我有一个旧版本的 strace :(
猜你喜欢
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2014-05-20
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
相关资源
最近更新 更多