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

标签 macos wait system-calls dtrace darwin

dtruss 似乎是一个有用的工具,用于分析 OS X 上应用程序的(错误)行为。我发现它与我心爱的 Linux 上的 strace 非常接近。但是解释其输出需要了解它所引用的系统调用,有时还需要了解它们可能生成的错误条件。以该行为例

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

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

什么是合适的引用文档来了解像这样的 OS X 系统调用?

您的引用资料涵盖的系统调用越多越好。

最佳答案

基于an answer通过 Randy 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 显然根本没有打印实际的成员。调整dtruss也许有可能获得该结构的成员,尽管我对此还很不确定,并且想知道为什么还没有人这样做。

我不太幸运地尝试将任何含义与此联系起来 Err#316输出。即使对整个 XNU 源代码进行 316 的十进制和十六进制表示,我也没有发现不包含其他数字的情况。 psynch_cvwait 的实现中肯定没有提到错误代码。本身,但该实现确实转发来自它调用的其他函数的错误代码。人们确实需要一个内核调试器来理清这一点并跟踪该值的实际来源。

总的来说,我现在离理解 dtruss 又近了一小步。产出,但需要做很多工作。因此,我们仍然非常感谢正确的引用文档以及对该错误代码来源的任何见解。

关于macos - 解释 dtruss 输出,如 “psynch_cvwait(...) = -1 Err#316”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13680614/

相关文章:

mysql - 为什么我的端口 3306 关闭,即使我根本没有绑定(bind)地址和跳过网络线路?

c# - 无法更改当前光标

c - 小型机 : Determining size of process table

java - 如何等待具有相同类名的所有元素?

linux - 在 64 位 Linux 上使用中断 0x80

sockets - 为什么 Sendto() 系统调用不返回发送的字节数?

macos - Restkit:迁移到 0.20

macos - 如何在新的 macOS 版本上为旧版本创建 Homebrew 瓶?

macos - 如何获取联网设备(可能使用 Bonjour)的 "model name"?

linux - 稍后执行脚本的命令