2012-12-03 13 views
17

dtruss sembra essere uno strumento utile per analizzare il (cattivo) comportamento delle applicazioni su OS X. La cosa più vicina che ho trovato alla mia amata strace su linux. Ma interpretare il suo output richiede una comprensione delle syscalls a cui si riferisce e, a volte, delle condizioni di errore che potrebbero generare. Prendiamo ad esempio la linea diInterpreta l'output di dtruss come "psynch_cvwait (...) = -1 Err # 316"

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

Sono interessato a una fonte di documentazione che mi avrebbe permesso di scoprire che cosa questa syscall è destinato a fare, ciò che i suoi parametri significano, e ciò che questo codice di errore rappresenta. Praticamente come mi aspetterei da una manpage della funzione libc. Sto richiedendo un riferimento che descriva le precedenti e simili syscalls, con gli errori e simili simili. Quindi prendi la linea come esempio per il tipo di output che mi piacerebbe essere in grado di capire.

Qual è il documento di riferimento appropriato per informazioni su syscalls OS X come questo?

Più syscalls le copertine di riferimento, meglio è.

risposta

4

Questo potrebbe essere un buon punto di partenza, solo per familiarizzare con le operazioni di dtrace. http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html

Per quanto riguarda le discoteche, è possibile iniziare da qui. http://www.opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master

http://developer.apple.com e http://www.opensource.apple.com essere luoghi per trovare maggiori dettagli.

In forma di libro, "Mac OS X Internals - A Systems Approach" di Amit Singh è un'altra cosa utile da avere in giro.

11

in base a an answer di Randy Howard, ho dato un'occhiata al XNU source code per questo. Il file syscalls.master ha l'elenco di tutte le syscall. Quel file descrive la firma del psynch_cvwait come questo:

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) 

che non sembra avere molta somiglianza con la dtruss uscita citato nella domanda. L'implementazione effettiva pthread_support.c è più utile, però:

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

Questo almeno dà un'idea di cosa gli argomenti stampati da dtruss sono. Sembra che il secondo possa essere una struttura, i suoi membri vengono descritti dal file syscalls.master. Quindi l'indirizzo sarebbe di scarsa utilità, e i membri effettivi apparentemente non sono stampati affatto da dtruss. Ottimizzare dtruss potrebbe essere possibile ottenere i membri di quella struttura, anche se sono tutt'altro che sicuro su questo account, e mi chiedo perché nessuno l'abbia ancora fatto.

Sono stato meno fortunato nel tentativo di associare qualsiasi significato a quell'uscita Err#316. Anche gregg l'intero codice sorgente XNU sia per il decimale sia per la rappresentazione esadecimale di 316, non ho trovato alcuna occorrenza che non includesse anche altre cifre. Il codice di errore non è certamente menzionato nell'implementazione di psynch_cvwait, ma tale implementazione inoltra i codici di errore da altre funzioni chiamate. Uno avrebbe davvero bisogno di un debugger del kernel per districarlo e tracciare la vera fonte di quel valore.

Nel complesso, ora sono un piccolo passo avanti nella comprensione dell'output dtruss, ma con molto lavoro. Quindi un documento di riferimento appropriato e qualsiasi informazione sulla fonte di quel codice di errore sarebbero comunque molto apprezzati.

+1

Per quanto riguarda il motivo per cui la risposta di Randy è stata rimossa: è stata contrassegnata per essere una risposta costituita da poco più di collegamenti esterni. Le risposte al solo collegamento sono generalmente disapprovate e solitamente non sono correlate alla domanda posta, ma questa era pertinente. Di conseguenza non l'ho cancellato. –

+0

Sono felice che tu abbia fatto progressi in merito. Sembra che potresti essere il più adatto per scrivere presto questo documento. Il motivo per cui la mia risposta è principalmente il collegamento è che la domanda originale era in particolare alla ricerca di documentazione che potesse aiutarlo. Accigliato o no, era quello che cercavo di fornire. –