Подтвердить что ты не робот

Интерпретировать вывод dtruss как "psynch_cvwait (...) = -1 Err # 316"

dtruss представляется полезным инструментом для анализа (неправильного) поведения приложений на OS X. Закрывает то, что я нашел моему любимому strace на linux. Но интерпретация его вывода требует понимания системных вызовов, на которые он ссылается, и иногда условий ошибок, которые они могут генерировать. Возьмем, например, строку

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

Мне интересен источник документации, который позволил бы мне узнать, для чего предназначен этот сценарий, какие его параметры означают, и что означает этот код ошибки. В значительной степени, как я ожидал от man-страницы функции libc. Я прошу ссылку, которая описывает вышеупомянутые и аналогичные системные вызовы, с вышеупомянутыми и подобными ошибками. Поэтому просто возьмите строку в качестве примера для вывода, который я хотел бы понять.

Каков подходящий справочный документ, чтобы узнать о таких системах OS X, как этот?

Чем больше системных вызовов ваших ссылок, тем лучше.

4b9b3361

Ответ 1

На основе ответа от Рэнди Ховарда я посмотрел на исходный код 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)

который, похоже, не очень похож на вывод 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. Даже grepping весь исходный код XNU как для десятичного, так и шестнадцатеричного представления 316, я не обнаружил появления, которое не включало и другие цифры. Код ошибки, конечно же, не упоминается в реализации самого psynch_cvwait, но эта реализация передает коды ошибок из других функций, которые она вызывает. На самом деле действительно нужен отладчик ядра, чтобы распутать это и проследить фактический источник этого значения.

В целом я сейчас очень маленький шаг ближе к пониманию вывода dtruss, но с большой работой. Таким образом, правильный справочный документ и любое понимание источника этого кода ошибки будут по-прежнему очень оценены.

Ответ 2

Это может быть хорошей отправной точкой, чтобы познакомиться с операцией 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 является местом чтобы найти более подробную информацию.

В книжной форме "Mac OS X Internals - системный подход" Амита Сингха - еще одна полезная вещь, которая может быть вокруг.