मैं कुछ भाषा में लिखी गई स्क्रिप्ट को पार्स करने के लिए लूआ का उपयोग कर रहा हूं (चलिए इसे एल कहते हैं) और लुआ-कोड बनाएं जो कि उदाहरण के द्वारा चलाया जा सकता है। LuaJIT। लेकिन उपयोगकर्ताओं के लिए डिबगिंग को सरल बनाने के लिए, मैं एल-फाइलों में लूआ/लुआजिट द्वारा दी गई रन टाइम त्रुटियों को मैप करना चाहता हूं। मैं इसे बनाया हुआ लुआ-कोड xpcalling करके, त्रुटि संदेश और stacktrace का अनुवाद करके और फिर इस संदेश के साथ त्रुटि कॉल करके करता हूं। दुर्भाग्य से यह मुझे दो स्टैक निशान देता है, जो मेरे द्वारा बनाया गया है और एक फंक्शन पर वापस ट्रेसिंग करता है जिसे त्रुटि कहा जाता है। क्या इस स्टैक ट्रेस से छुटकारा पाना संभव है, या ऐसा करने का कोई बेहतर तरीका है?लुआ: स्टैक ट्रेस के बिना त्रुटि कैसे कॉल करें
local status, err = xpcall(loadedCode, debug.traceback)
if not status then
error(createANewErrorMessageWithPrettyTraceback(err),0)
end
आउटपुट:
luajit: ./my/file.name:5: Some error message
stack traceback:
my pretty traceback
stack traceback:
[C]: in function 'error'
./my/file/calling/error.lua:44: in function <./my/file/calling/error.lua:26>
./my-main:16: in main chunk
[C]: at 0x00404180
मुझे पता है कि जैसे Moonscript यह करने के लिए कुछ इसी तरह करता है, लेकिन जहाँ तक मैं देख सकते हैं वे सिर्फ stderr करने के लिए नए त्रुटि संदेश लिख सकते हैं और उसके बाद के रूप में सामान्य जारी है, बजाय कार्यक्रम को रोकने के है जो मैं करना चाहता हूँ की।
ऐसा करने की संभावना है और फिर कोई तर्क के साथ त्रुटि को कॉल कर रहा है, जो प्रोग्राम को असफल कर देगा (वास्तव में मुझे लगता है कि यह त्रुटि है जो विफल हो जाती है), लेकिन यह काफी बदसूरत समाधान की तरह लगता है, इसलिए मैं बेवकूफ रखूंगा ऐसा करने से दूसरा निशान।
पीएस: मुझे लगता है कि शीर्षक वास्तव में क्या काम नहीं करता है (क्योंकि त्रुटि केवल दो तर्क लेती है), इसलिए मैं वास्तव में जो पूछ रहा हूं वह यह है कि इस तरह कुछ कैसे हासिल किया जा सकता है। (वहाँ अन्य कार्यों है कि इसी तरह की बातों शायद कर रहे हैं, या जहाँ मैं यह पता लगाने कैसे है कि समारोह अपने आप को लिखने के लिए करने के लिए दिखना चाहिए।)
संपादित करें: यह शायद समारोह है कि त्रुटि के अपने ट्रैस बैक प्राप्त करने के लिए का उपयोग कर संपादित करने के लिए संभव है, के रूप में यह है debug.traceback के साथ?
क्यों त्रुटि कॉल करने के बजाय ट्रेसबैक मुद्रित न करें? –
क्योंकि मैं जब यह एक त्रुटि है कार्यक्रम विफल, बजाय सिर्फ उपयोगकर्ता है कि कुछ हुआ बताने का चाहते हैं। लेकिन जैसे-जैसे रयान स्टीन नीचे ने कहा, मैं तो बस os.exit कॉल कर सकते हैं। – MartinValen