प्रहरी और फॉन्ट-लॉक के दौरान त्रुटियों को कैसे डीबग करें


10

जब किसी प्रक्रिया प्रहरी के अंदर या फॉन्ट-लॉकिंग के दौरान कोई त्रुटि होती है, तो Emacs बैकट्रेस नहीं दिखाता है, जबकि debug-on-errorपहले सक्षम था।

मैं समझता हूं कि इन त्रुटियों को क्यों पकड़ा जाता है, वही त्रुटि फिर से शुरू की जा सकती है जबकि बैकट्रेस प्रस्तुत करने की कोशिश की जा रही है। हालांकि जब मैं वास्तव में उस त्रुटि को डीबग करना चाहता हूं तो यह बहुत उपयोगी नहीं है। मैं इसके बजाय काम करने से Emacs के गैर-जिम्मेदार होने का जोखिम उठाऊंगा:

error in process sentinel: Wrong type argument: stringp, nil

आखिरकार, मैं सिर्फ एक दूसरा उदाहरण शुरू कर सकता हूं, अगर पहली बार पागल होना शुरू हो जाए। थोड़ा और संदर्भ तब मदद करेगा जब ऐसी कई जगहें हों जहाँ ऐसी त्रुटि सैद्धांतिक रूप से किसी प्रहरी में हो सकती है।

तो मैं उन मामलों में भी बैकैस दिखाने के लिए एमएसीएस को कैसे मजबूर कर सकता हूं जहां debug-on-errorकोई प्रभाव नहीं है?


1
मैंने emacs.stackexchange.com/questions/3552/… देखा है, लेकिन लगता है कि सामान्य रूप से इस बारे में एक प्रश्न होना चाहिए, न कि केवल एक विशेष मामले में। इसके अलावा, मैं वास्तव में उम्मीद करता हूं कि "प्रिंट प्रिंट का उपयोग करें" केवल एकमात्र उत्तर नहीं है, क्योंकि यही वह है जो मैंने अतीत में इस्तेमाल किया है, और यह संतोषजनक नहीं है, खासकर यदि त्रुटि "अमान्य चेहरा संदर्भ: कुछ-चेहरा-जो-मैं-बिल्कुल-पता है -टेक्स्ट ", जो मेरे द्वारा इंस्टॉल किए गए हर पैकेज से शुरू हो सकता है।
तारसियस

URL इस प्रश्न की ओर इशारा करता है और इसलिए आपकी टिप्पणी में उलझा हुआ है, क्या यह जानबूझकर है या आपकी ओर से कोई त्रुटि है?
थामासा

यही वह मुद्दा है जिसका मेरा मतलब है: ttp: //emacs.stackexchange.com/questions/1045/how-to-debug-startup-problem-if-debug-init-has-no-eetect
tarsius

लिंक टैरियस का इरादा है: emacs.stackexchange.com/questions/1045/…-नट - इनिट - हैस -नो-इफ़ेक्ट
dcorking

जवाबों:


10

प्रक्रिया प्रहरी के लिए, मुझे नहीं लगता कि एक अच्छा कारण है। IOW मुझे लगता है कि यह सिर्फ एक लापता सुविधा है, इसलिए मैं आपको सुझाव देता हूं M-x report-emacs-bug

फॉन्ट-लॉक के लिए, यह समस्या अधिक पेचीदा है क्योंकि वास्तव में ऐसा होता है कि त्रुटि को जीट-लॉक के दौरान ट्रिगर किया जाता है, अर्थात रिडीप्ले के दौरान, और हम आसानी से उस समय डिबगर में प्रवेश नहीं कर सकते हैं (IIRC कुछ बिंदु पर गर्ड बनाने की कोशिश की यह काम करता है, लेकिन अभी भी कुछ गंभीर समस्याएं थीं)। तो आप इसे निम्न तरीकों में से एक में डीबग कर सकते हैं:

  • M-x jit-lock-debug-mode जो कि रीडिसप्ले के ठीक बाद चलाने के लिए जिट-लॉक को बदलता है, ताकि हम डिबगर में प्रवेश कर सकें।
  • M-: (setq font-lock-support-mode nil) RETऔर फिर + रीएनेबल फॉन्ट-लॉक को अक्षम करें। इस तरह से फॉन्ट-लॉक में जीट-लॉक का उपयोग नहीं किया जाता है, इसलिए यह उपयोगकर्ता के कमांड के दौरान बाद के रेडिसप्ले के बजाय चलता है।

दरअसल, debug-on-errorप्रक्रिया प्रहरी पर ठीक काम करने लगता है।
स्टेफान

@ टार्सियस - कृपया अपने डिबग्स मुद्दे के लिए एक लिंक पोस्ट करें
दिनांक

tarsius का फीचर अनुरोध 19432 है जहां इसे अप्रतिबंधित के रूप में टैग किया गया है। स्टीफन मोननियर ने वहां एक वर्कअराउंड पोस्ट किया जो --evalइसके बजाय उपयोग करता है --debug-init । इसके अलावा उनके समाधान का मुझे मेरे वास्तविक में एक पश्व-अनुरेखन में छोड़ मदद नहीं करता है.emacs.d
dcorking

1
@dcorking: नहीं, बग # 19432 में, मैंने "वर्कअराउंड" पोस्ट नहीं किया, लेकिन इस बग को पुन: पेश करने का असफल प्रयास किया। आप अपनी समस्या को दोहराने के लिए एक नुस्खा क्यों नहीं भेजते हैं?
स्टीफन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.