Linux Strace多线程程序

Linux Strace多线程程序,linux,strace,Linux,Strace,在多线程程序上运行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 [pid 14778]futex(0x7fd8082f266c,f

在多线程程序上运行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
[pid 14778]futex(0x7fd8082f266c,futexúu WAKEúu OPúu PRIVATE,1,1,0x7fd8082f2668,{futexúu OPúu SET,0,futexúOPúCMPúu GT,1}
[pid 14780])=0

请注意,参数与
在一行,结果与
在另一行。没有与结果相关的论据会降低strace的效用。跟踪多线程程序时,是否可以让strace在同一行上打印结果和参数?

使用
strace-ff cmd 2>log.out

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