MvG*_*MvG 18 macos darwin dtrace system-calls wait
dtruss似乎是分析OS X上应用程序(错误)行为的有用工具.我strace在Linux上找到了我心爱的关闭事物.但解释其输出需要了解它所引用的系统调用,有时还需要了解它们可能产生的错误条件.以线为例
psynch_cvwait(0x6BE38D54, 0x100000100, 0x0) = -1 Err#316
Run Code Online (Sandbox Code Playgroud)
我对文档来源感兴趣,这些文档可以让我找出这个系统调用的目的,它的参数表示什么,以及这个错误代码代表什么.非常像我期望从libc函数手册页.我要求一个描述上述和类似系统调用的参考,具有上述和类似的错误.因此,只需将该行作为我希望能够理解的输出类型的示例.
有关OS X系统调用的相关参考文档是什么?
您的参考覆盖的系统调用越多越好.
MvG*_*MvG 12
基于答案由兰迪·霍华德,我一看XNU源代码这一点.该文件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)
Run Code Online (Sandbox Code Playgroud)
这似乎与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)
Run Code Online (Sandbox Code Playgroud)
这至少可以说明打印的参数dtruss是什么.看起来第二个可能是一个结构,其成员是由syscalls.master文件描述的.所以这个地址用处不大,实际的成员显然根本没有被打印出来.调整dtruss它可能有可能获得该结构的成员,虽然我对这个帐户很不确定,并想知道为什么还没有人这样做.
我试图将任何意义与该Err#316输出联系起来都不太幸运.即使是对于小数和316的十六进制表示来说,整个XNU源代码也是如此,我发现没有包含其他数字的事件.错误代码当然没有在其psynch_cvwait自身的实现中提及,但该实现确实转发了它调用的其他函数的错误代码.人们真的需要一个内核调试器来解开它并跟踪该值的实际来源.
总的来说,我现在距离理解dtruss输出还有一小步,但需要做很多工作.因此,仍然非常感谢正确的参考文档以及对该错误代码来源的任何见解.
这可能是一个很好的起点,只是为了熟悉 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.com和http://www.opensource.apple.com是查找更多详细信息的地方。
Amit Singh 所著的“Mac OS X Internals -- A Systems Approach”以书籍形式提供,是另一件有用的东西。
小智 6
我找到的关于此的唯一文档是代码本身。
它是 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
| 归档时间: |
|
| 查看次数: |
4521 次 |
| 最近记录: |