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