प्रसंगडिबगिंग दुभाषिया जब वी एम पुरातन
एक विश्वविद्यालय परियोजना हम एक वस्तु तालिका का उपयोग और देखो क्या होता करने के लिए 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'
और फिर मैं अगर आदिम गलत है या कोई त्रुटि होती है डीबग कर सकते हैं। बेशक वहाँ बहुत कुछ करने की जरूरत है लेकिन मैं इसे कैसे प्राप्त कर सकता हूं?
क्या हम
श्रेणी
VMMaker-InterpreterSimulation
वर्गStackInterpreterSimulator
की कोशिश की। टिप्पणी में कोड की कोशिश कर रहाDoIt ^(StackInterpreterSimulator new openOn: Smalltalk imageName) test
त्रुटियों:
displayForm := 'Display has not yet been installed' asDisplayText form.
ByteString नहीं समझती
asDisplayText
(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
वर्तमान स्थिति
हम एक वस्तु तालिका को लागू करने शुरू कर दिया । गुणों का लुकअप ऑब्जेक्ट टेबल के माध्यम से जा सकता है। पूर्ण ऑब्जेक्ट टेबल समर्थन और प्रत्यक्ष बिंदुओं का कोई उपयोग बहुत मुश्किल नहीं है क्योंकि पॉइंटर्स की हर जगह अपेक्षा की जाती है। तो हम ऑब्जेक्ट टेबल में पॉइंटर्स का उपयोग यह पहचानने के लिए करते हैं कि ओटी के माध्यम से एक लुकअप कब जाना चाहिए। हमने सभी ऑब्जेक्ट निर्माण प्राइमेटिव भी पाए और तालिका में नई ऑब्जेक्ट्स जोड़ दी।
बस संदर्भ के लिए, आप RoarVM को देखना चाहेंगे, इसकी सामान्यतः ऑब्जेक्ट टेबल होती है लेकिन इसके बिना एक संस्करण भी होता है: https://github.com/smarr/RoarVM/tree/features/without-object- तालिका कोगवीएम की तुलना में, इसमें एक जेआईटी कंपाइलर नहीं है, और यह सामान्य रूप से धीमा है। हालांकि, यह अभी भी चीजों से संपर्क करने के तरीके पर कुछ अंतर्दृष्टि दे सकता है। – smarr