解释dtruss输出,如“psynch_cvwait(...)= -1 Err#316”

时间:2012-12-03 09:45:14

标签: macos wait system-calls dtrace darwin

dtruss似乎是分析OS X上应用程序(错误)行为的有用工具。我在linux上找到了我心爱的strace的关闭内容。但解释其输出需要了解它所引用的系统调用,有时还需要了解它们可能产生的错误条件。例如,

psynch_cvwait(0x6BE38D54, 0x100000100, 0x0)      = -1 Err#316

我对文档来源感兴趣,这些文档可以让我找出这个系统调用的目的,它的参数表示什么,以及这个错误代码代表什么。非常像我期望从libc函数手册页。我要求提供一个描述上述和类似系统调用的参考,其中包含上述和类似的错误。因此,只需将该行作为我希望能够理解的输出类型的示例。

了解OS X系统调用的相应参考文档是什么?

您的参考涵盖的系统调用越多越好。

3 个答案:

答案 0 :(得分:11)

基于an answerRandy Howard,我查看了XNU source code。文件syscalls.master包含所有系统调用的列表。该文件描述了psynch_cvwait的签名:

uint32_t
psynch_cvwait(
  user_addr_t cv,
  uint64_t cvlsgen,
  uint32_t cvugen,
  user_addr_t mutex,
  uint64_t mugen,
  uint32_t flags,
  int64_t sec,
  uint32_t nsec)

与问题中引用的dtruss输出似乎没有太大的相似之处。不过,pthread_support.c中的实际实现更有用:

/*
 *  psynch_cvwait: This system call is used for psynch cvar waiters to block in kernel.
 */
int
psynch_cvwait(__unused proc_t p,
              struct psynch_cvwait_args * uap,
              uint32_t * retval)

这至少可以说明dtruss打印的参数是什么。看起来第二个可能是一个结构,其成员由syscalls.master文件描述。所以这个地址用处不大,实际的成员显然根本没有被打印出来。调整dtruss也许有可能获得该结构的成员,虽然我对这个帐户很不确定,并且想知道为什么还没有人这样做。

我试图将任何含义与Err#316输出相关联,就没那么幸运了。即使是对于小数和316的十六进制表示来说,整个XNU源代码也是如此,我发现没有包含其他数字的事件。在psynch_cvwait本身的实现中肯定没有提到错误代码,但该实现确实转发了它调用的其他函数的错误代码。人们真的需要一个内核调试器来解开它并跟踪该值的实际来源。

总的来说,我现在距离理解dtruss输出只有很小的一步,但需要做很多工作。因此,我们非常感谢您提供正确的参考文档以及对该错误代码来源的任何见解。

答案 1 :(得分:4)

这可能是一个很好的起点,只是为了熟悉dtrace操作。 http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html

就系统调用而言,您可以从这里开始。 http://www.opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master

http://developer.apple.comhttp://www.opensource.apple.com是查找更多详情的地方。

以书的形式,Amit Singh的“Mac OS X Internals - A Systems Approach”是另一个有用的东西。

答案 2 :(得分:1)

我在此发现的唯一文档是代码本身。

它是pthread_cond_wait()和pthread_cond_timedwait()的内核端。

在这种情况下,它是后者,因为错误代码是#316。 psync_cvcontinue在错误代码中设置两位,以指示等待超时(0x100)还是没有服务器(0x200)。错误#316(0x13C)是超时位,与ETIMEDOUT(60)进行按位或运算。

https://github.com/apple/darwin-libpthread/blob/master/kern/kern_synch.c#L1216 https://github.com/apple/darwin-xnu/blob/master/bsd/sys/errno.h#L179