2012-12-03 11 views
17

dtruss scheint ein nützliches Werkzeug zu sein, um das (Fehl-) Verhalten von Anwendungen auf OS X zu analysieren. Das Schliessen, was ich zu meiner Geliebten fand strace auf Linux. Die Interpretation seiner Ausgabe erfordert jedoch ein Verständnis der Syscalls, auf die sie sich bezieht, und manchmal der Fehlerbedingungen, die sie möglicherweise erzeugen. Nehmen Sie zum Beispiel die Linieinterpretieren dtruss output wie "psynch_cvwait (...) = -1 Err # 316"

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

Ich bin in einer Quelle der Dokumentation interessiert, die mir erlauben würde, um herauszufinden, was diese syscall tun soll, was seine Parameter bedeuten, und was dieser Fehlercode steht. So ziemlich, wie ich es von einer Manpage der libc-Funktion erwarten würde. Ich frage nach einer Referenz, die die obigen und ähnliche syscalls beschreibt, mit den oben genannten und ähnliche Fehler. Nehmen Sie die Zeile als Beispiel für die Art von Ausgabe, die ich gerne verstehen würde.

Was ist das entsprechende Referenzdokument, um über OS X-Syscalls wie dieses zu lernen?

Je mehr syscalls Ihre Referenzabdeckungen, desto besser.

Antwort

4

Dies könnte ein guter Ausgangspunkt sein, nur um sich mit dtrace-Betrieb vertraut zu machen. http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html

Soweit syscalls, könnten Sie hier beginnen. http://www.opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master

http://developer.apple.com und http://www.opensource.apple.com Orte zu finden, um weitere Details zu finden.

In Buchform ist "Mac OS X Internals - Ein Systemansatz" von Amit Singh eine weitere nützliche Sache.

11

Basierend auf an answer von Randy Howard, sah ich mir die XNU source code dafür an. Die Datei syscalls.master enthält die Liste aller syscalls. Diese Datei beschreibt die Unterschrift von psynch_cvwait wie folgt aus:

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) 

, die scheint nicht viel Ähnlichkeit mit dem dtruss Ausgang in der Frage zitiert zu haben. Die tatsächliche Implementierung in pthread_support.c ist nützlicher, aber:

/* 
* 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) 

Das zumindest eine Idee gibt, was gedruckt die Argumente von dtruss sind. Sieht so aus, als ob der zweite eine Struktur sein könnte, deren Mitglieder von der Datei syscalls.master beschrieben werden. Die Adresse würde also wenig nutzen, und die tatsächlichen Mitglieder werden offenbar überhaupt nicht von Druiden gedruckt. Tweaking dtruss es könnte vielleicht möglich sein, an die Mitglieder dieser Struktur zu bekommen, obwohl ich bin weit davon nicht sicher in diesem Zusammenhang, und wundere mich, warum noch niemand dies getan hat.

Ich hatte weniger Glück beim Versuch, überhaupt eine Bedeutung mit diesem Err#316 Ausgang zu assoziieren. Selbst wenn ich den gesamten XNU-Quellcode sowohl für die dezimale als auch für die hexadezimale Darstellung von 316 überlagerte, fand ich kein Vorkommen, das auch andere Ziffern nicht enthielt. Der Fehlercode wird in der Implementierung von psynch_cvwait selbst nicht erwähnt, aber diese Implementierung leitet Fehlercodes von anderen aufgerufenen Funktionen weiter. Man würde wirklich einen Kernel-Debugger benötigen, um das zu entwirren und die tatsächliche Quelle dieses Wertes zu verfolgen.

Im Großen und Ganzen bin ich jetzt einen kleinen Schritt näher am Verständnis der dtruss Ausgabe, aber mit viel Arbeit. Ein gutes Referenzdokument und ein Einblick in die Quelle dieses Fehlercodes würden daher immer noch sehr geschätzt werden.

+1

In Bezug darauf, warum Randys Antwort entfernt wurde: Es wurde als eine Antwort gekennzeichnet, die aus wenig mehr als externen Links bestand. Link-Only-Antworten sind im Allgemeinen verpönt und stehen normalerweise nicht in Zusammenhang mit der gestellten Frage, aber diese war relevant. Ich habe es als Ergebnis wiederhergestellt. –

+0

Ich bin froh, dass Sie dabei Fortschritte gemacht haben. Es klingt, als ob Sie am besten geeignet sind, dieses Dokument bald zu schreiben. Der Grund für meine Antwort in erster Linie ist, dass die ursprüngliche Frage speziell nach einer Dokumentation suchte, die ihm helfen könnte. Auf oder nicht, das war es, was ich zu bieten versuchte. –