2013-11-21 12 views
7

प्रसंगडिबगिंग दुभाषिया जब वी एम पुरातन

एक विश्वविद्यालय परियोजना हम एक वस्तु तालिका का उपयोग और देखो क्या होता करने के लिए Pharo वीएम बदलना चाहते हैं के रूप में बदल रहा है।

हम pharo-vm clone from github और वीएममेकर का उपयोग करते हैं। वीएम का निर्माण ठीक काम करता है।

आरंभ करने के लिए हम एक आदिम है कि एक वृद्धि की जाती पूर्णांक रिटर्न कहा:

InterpreterPrimitives>>primitiveIntegerIncrement 
    "increments an integer" 
    self pushInteger: self popInteger + 1 . 

और उसके अनुसार StackInterpreter class>>initializePrimitiveTable संशोधित

MaxPrimitiveIndex := 576. 
"... and so on ..." 
    (575 primitiveFail) 
    (576 primitiveIntegerIncrement)) 

और यह काम करता है।

समस्या

जब हम वीएम हम परीक्षण रन के लिए SmalltalkImage में पहले से ही तो हम संकलन और यह काम नहीं किया देखने की जरूरत नहीं करना चाहती में परिवर्तन करें।

कुछ की तरह:

StackInterpreter test: '1 inc' 

और फिर मैं अगर आदिम गलत है या कोई त्रुटि होती है डीबग कर सकते हैं। बेशक वहाँ बहुत कुछ करने की जरूरत है लेकिन मैं इसे कैसे प्राप्त कर सकता हूं?

क्या हम

  1. श्रेणी VMMaker-InterpreterSimulation वर्ग StackInterpreterSimulator की कोशिश की। टिप्पणी में कोड की कोशिश कर रहा

    DoIt 
        ^(StackInterpreterSimulator new openOn: Smalltalk imageName) test 
    

    त्रुटियों:

    displayForm := 'Display has not yet been installed' asDisplayText form. 
    

    ByteString नहीं समझती asDisplayText

  2. (CogVMSimulator new openOn: Smalltalk imageName) test 
    (InterpreterSimulator new openOn: Smalltalk imageName) test 
    

    त्रुटि:

    PrimitiveFailed: primitive #basicNew: in Array class failed 
    

मैं भी इस स्क्रीन कास्ट पाया लेकिन यह केवल GBD बाहर का उपयोग करने से वीएम डिबग करता है: http://vimeo.com/22485382#

हमारी परियोजना यहाँ की मेजबानी की है: http://smalltalkhub.com/#!/~kirstin/PharoObjectTable

वर्तमान स्थिति

हम एक वस्तु तालिका को लागू करने शुरू कर दिया । गुणों का लुकअप ऑब्जेक्ट टेबल के माध्यम से जा सकता है। पूर्ण ऑब्जेक्ट टेबल समर्थन और प्रत्यक्ष बिंदुओं का कोई उपयोग बहुत मुश्किल नहीं है क्योंकि पॉइंटर्स की हर जगह अपेक्षा की जाती है। तो हम ऑब्जेक्ट टेबल में पॉइंटर्स का उपयोग यह पहचानने के लिए करते हैं कि ओटी के माध्यम से एक लुकअप कब जाना चाहिए। हमने सभी ऑब्जेक्ट निर्माण प्राइमेटिव भी पाए और तालिका में नई ऑब्जेक्ट्स जोड़ दी।

+1

बस संदर्भ के लिए, आप RoarVM को देखना चाहेंगे, इसकी सामान्यतः ऑब्जेक्ट टेबल होती है लेकिन इसके बिना एक संस्करण भी होता है: https://github.com/smarr/RoarVM/tree/features/without-object- तालिका कोगवीएम की तुलना में, इसमें एक जेआईटी कंपाइलर नहीं है, और यह सामान्य रूप से धीमा है। हालांकि, यह अभी भी चीजों से संपर्क करने के तरीके पर कुछ अंतर्दृष्टि दे सकता है। – smarr

उत्तर

4

आपकी परियोजना कितनी लंबी है और आप कितने लोग हैं? मेरे लिए आप जो कुछ करने की कोशिश करते हैं वह काफी काम है। क्या आपके पास निम्न स्तर के व्यवहार के बारे में अच्छा ज्ञान है?

अपने प्रश्न का उत्तर देने के लिए, यहां मुख्य समस्या यह है कि कोग सिम्युलेटर को फार्मा वीएम कांटा में नहीं रखा जाता है। ऐसा इसलिए है क्योंकि फरो चालक दल में कोई भी सिम्युलेटर का उपयोग नहीं करता है। हम केवल जीडीबी से बाहरी डीबगिंग का उपयोग करते हैं। असल में फोरो लोग ज्यादातर वीएम प्लगइन्स पर काम करते हैं, वीएम का मूल मुख्य रूप से एलियट मिरांडा द्वारा बनाए रखा और विकसित किया जाता है जो स्क्वाक पर काम करता है। इसलिए जब हम वीएम कोर में एक बग है तो हम उसे रिपोर्ट करते हैं।

चरण 1:

अपनी परियोजना के लिए आप कम से कम 2 चरणों में विभाजित करने के लिए होता ढेर के साथ वस्तु तालिका काम करने के वीएम

चरण 2: अपनी वस्तु की मेज के साथ काम करने के JIT

ध्यान दें कि चरण 2 के लिए मैं किसी ऑब्जेक्ट को अपने शीर्षलेख तक पहुंचने के तरीके को बदलने की अनुशंसा नहीं करता, इसलिए एक VW- जैसी ऑब्जेक्ट तालिका होती है जहां आपके पास ऑब्जेक्ट तालिका में एक पर निश्चित आकार शीर्षलेख होता है, और फ़ील्ड ढेर में वस्तुओं (और शायद हेडर एक्सटेंशन) का।

तो StackVMSimulator का उपयोग करें और पहले StackVM का निर्माण करें। जब सब कुछ काम करेगा (संदर्भ सहित), आप जेआईटी हैकिंग के बारे में सोच सकते हैं। हाल ही में गिलर्मो पोलिटो ने निर्माण प्रक्रिया में स्टैक वीएम को पोर्ट किया (फ़ारोवीएमबील्डर के बजाय फ़ारोएसवीएमबील्डर देखें), एक लड़के ने इस निर्माता के साथ समस्याएं की सूचना दी लेकिन आप इसे काम करने के लिए थोड़ा सा हैक कर सकते हैं।

अब फेरो 2.0 (जो जेनरेटर छवि का फ़ारो संस्करण है) पर सिम्युलेटर काम करने के लिए, आपको मॉन्टिसेलो ब्राउज़र खोलना होगा और एलियट की शाखा कोग पैकेज (रेपो एमसीटीपीपी रिपोजिटरी स्थान: 'http: // स्रोत। स्क्वाक। ओआरजी/वीएममेकर '), लेकिन नवीनतम कोग नहीं, एक ही तारीख के आसपास फोरो-वीएम के वर्तमान वीएममेकर पैकेज के रूप में, क्योंकि एलियट की शाखा का नवीनतम कोग और वीएममेकर स्थिर नहीं है।

एलियट की बिल्ड छवि से शुरू करने का विकल्प और फिरोज़ शाखा से चीजों को मर्ज करना। यहां स्कीक विकास छवि (http://www.mirandabanda.org/cogblog/build-image/) बनाने के बारे में जानकारी है।

| cos | 
cos := CogVMSimulator newWithOptions: #(Cogit SistaStackToRegisterMappingCogit). 
cos desiredNumStackPages: 8. 
cos openOn: 'my/favourite.image'. 
cos openAsMorph; toggleTranscript; halt; run 

आप SistaStackToRegisterMappingCogit विकल्प की जरूरत नहीं है:

फिर एलियट मुझे इस स्क्रिप्ट को एक बार दे दी है। मुझे लगता है कि StackVMSimulator के साथ कुछ समान लिपि काम करना चाहिए।

अन्त में सिम्युलेटर के बारे में कुछ प्रलेखन हैं, लेकिन यह CogSimulator के लिए ही है (इन दस्तावेजों आप पहले से ही उम्मीद है जानता है कि कैसे StackSimulator काम करता है, और बस आप कैसे JIT के साथ उपयोग करने के संकेत देने देना): http://www.mirandabanda.org/cogblog/2008/12/12/simulate-out-of-the-bochs/ और "कॉग वीएम (भाग एक्स)" नामक एक वीडियो में, एक्स 1 से 6 तक है, एलियट दिखाता है कि वह x86 को अलग करने के लिए सिम्युलेटर का उपयोग कैसे करता है, ढेर प्रिंट करता है और ढेर का निरीक्षण करता है।

एक और युक्ति, अपने मेलिंग सूची (pharo उपयोगकर्ता या pharo dev) पर अपने प्रश्न पूछें, क्योंकि यहां कोई भी आपका प्रश्न नहीं देख सकता है (सौभाग्य से किसी ने मुझे इस बार आपके प्रश्न की ओर इशारा किया)।

और अगर आप फारो 2.0 में सिम्युलेटर चलाने में कामयाब रहे तो मेल मेलिंग सूची पर बताएं, कुछ लोग (मेरे रूप में) इसमें बहुत रूचि रखते हैं। मैं इसे किसी बिंदु पर करने की योजना बना रहा था।

शुभकामनाएं! वैसे भी अच्छा परियोजना।

1

पिछली बार जब मैंने सिम्युलेटर का उपयोग करने की कोशिश की तो लगभग एक साल पहले, और मैंने इसे काम नहीं किया।

अंक 107 अपने asDisplayText के लिए एक पैच में शामिल हैं: हालांकि, वहाँ कुछ पैच, जो मुझे लगता है एकीकृत किया गया कभी नहीं है कि मदद की हो सकती हैं मुद्दा।

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