2012-12-03 18 views
17

dtruss ओएस एक्स पर अनुप्रयोगों के गलत (गलत) व्यवहार का विश्लेषण करने के लिए एक उपयोगी टूल प्रतीत होता है। मेरे प्यारे को जो चीज मिली लिनक्स पर strace। लेकिन इसके आउटपुट को समझने के लिए सिस्कोल की समझ की आवश्यकता होती है, और कभी-कभी त्रुटि उत्पन्न होने वाली त्रुटियों की आवश्यकता होती है। उदाहरण के लिए लाइन"psynch_cvwait (...) = -1 एरर # 316"

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

मैं दस्तावेज़ीकरण का एक स्रोत है जो मुझे पता लगाने के लिए क्या इस syscall क्या करने का इरादा है की अनुमति होगी, इसके मापदंडों क्या दर्शाता है, और क्या इस त्रुटि कोड के लिए खड़ा है में दिलचस्पी रखता हूँ ले लो। बहुत अधिक की तरह मैं एक libc समारोह manpage से उम्मीद करेंगे। मैं उपरोक्त और इसी तरह के त्रुटियों के साथ उपरोक्त और इसी तरह के सिस्कोल का वर्णन करता हूं। तो बस इस तरह के आउटपुट के लिए एक उदाहरण के रूप में लाइन लें जिसे मैं समझने में सक्षम होना चाहता हूं।

इस तरह ओएस एक्स सिस्कोल के बारे में जानने के लिए उपयुक्त संदर्भ दस्तावेज़ क्या है?

आपके संदर्भ कवर जितना अधिक सिस्कोल बेहतर होगा।

उत्तर

4

यह एक अच्छा प्रारंभिक बिंदु हो सकता है, बस 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 अधिक जानकारी प्राप्त करने के लिए स्थान होने के कारण।

पुस्तक रूप में, "मैक ओएस एक्स आंतरिक - ए सिस्टम दृष्टिकोण" अमित सिंह द्वारा एक और उपयोगी चीज है।

11

an answerRandy 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 स्रोत कोड को भी grepping और 316 के हेक्साडेसिमल प्रतिनिधित्व, मुझे कोई घटना नहीं मिली जिसमें अन्य अंक भी शामिल नहीं थे। psynch_cvwait के कार्यान्वयन में त्रुटि कोड का निश्चित रूप से उल्लेख नहीं किया गया है, लेकिन यह कार्यान्वयन अन्य कार्यों से त्रुटि कोड अग्रेषित करता है। किसी को वास्तव में उस खंड के वास्तविक स्रोत का पता लगाने के लिए एक कर्नेल डीबगर की आवश्यकता होगी।

पूरी तरह से अब मैं dtruss आउटपुट को समझने के करीब एक बहुत छोटा कदम हूं, लेकिन बहुत सारे काम के साथ। तो एक उचित संदर्भ दस्तावेज़ और उस त्रुटि कोड के स्रोत में कोई अंतर्दृष्टि अभी भी बहुत सराहना की जाएगी।

+1

क्यों रैंडी का जवाब हटा दिया गया था: इसे बाहरी लिंक से थोड़ा अधिक जवाब देने के लिए ध्वजांकित किया गया था। लिंक-केवल उत्तर आम तौर पर फंस जाते हैं, और आमतौर पर पूछे गए प्रश्न से संबंधित नहीं होते हैं, लेकिन यह एक प्रासंगिक था। परिणामस्वरूप मैंने इसे हटा दिया। –

+0

मुझे खुशी है कि आपने इस पर प्रगति की है। ऐसा लगता है कि आप जल्द ही इस दस्तावेज़ को लिखने के लिए सबसे उपयुक्त हो सकते हैं। मेरे उत्तर का मुख्य रूप से लिंक होने का कारण यह है कि मूल प्रश्न विशेष रूप से दस्तावेज़ीकरण की तलाश में था जो उसकी सहायता कर सकता था। फंसे हुए या नहीं, यही वह था जो मैंने प्रदान करने की कोशिश की थी। –

संबंधित मुद्दे