2011-06-06 9 views
8

मैंने emacs 23.3 में गड़बड़ी के माध्यम से पीडीबी का उपयोग करना शुरू कर दिया है, मैं बफर से डीबगर को भेजे गए कमांड संदेशों को कैसे हुक कर सकता हूं? कॉमेंट की अंगूठी को बनाए रखने के लिए मैंने जीडीबी के साथ उपयोग के लिए नीचे दी गई सलाह लिखी, लेकिन पीडीबी के लिए हुक करने के लिए समकक्ष फ़ंक्शन नहीं मिल सका। मैं अपने मुख्य मोड के रूप में पायथन-मोड.ल का उपयोग कर रहा हूँ।मैं gud के माध्यम से पीडीबी को भेजे गए आदेशों को कैसे हुक करूं?

धन्यवाद।

(defadvice gdb-send-item (before gdb-save-history first nil activate) 
    "write input ring on quit" 
    (if (equal (type-of item) 'string) ; avoid problems with 'unprintable' structures sent to this function.. 
    (if (string-match "^q\\(u\\|ui\\|uit\\)?$" item) 
     (progn (comint-write-input-ring) 
      (message "history file '%s' written" comint-input-ring-file-name))))) 
+0

नोट: 'gdb-send-item' को वहां (23.3) और अब (24.3) के बीच कहीं भी emacs से हटा दिया गया था, लेकिन नीचे दिए गए उत्तर में सलाह के साथ उपर्युक्त स्ट्रिंग-मिलान को विलय कर रहा है, मेरे emacs gud/gdb और बाहरी जीडीबी इतिहास फिर से समन्वयित – elbeardmorez

उत्तर

1

मुझे लगता है कि मैं शायद सिर्फ एक छोटे से अधिक खुदाई के साथ समय में अपने ही सवाल का जवाब दे सकता था, लेकिन पहले gdb समाधान नहीं बल्कि पुराने सीखने के मोर्चे पर मुझे से बाहर ले लिया। मैं बरामद, तो ..

सी एच बी सी एस मेजर

के बाद स्क्रॉल हम पहचान कर सकते हैं का एक सा 'comint: भेजें इनपुट' फ़ंक्शन कुंजी 'दर्ज' करने के लिए बाध्य है। इस फ़ंक्शन के स्रोत को देखकर, comint.el: 1765 'रन-हुक-विद-एर्ग' के लिए एक कॉल है .. यह वह जगह है जहां हम महसूस करते हैं कि हम जो भी चाहते हैं उसे करने के लिए कहीं भी 'पीडीबी' नहीं है।

गड़ बाहरी डीबगिंग प्रक्रियाओं को कॉल करने और परिणामों को वापस करने के लिए एक सामान्य रैपर है .. फिर नियंत्रण नियंत्रण में नहीं है। यह जीडीबी के साथ समान था, लेकिन बाहरी कॉल के आस-पास एक अच्छा (पूर्व-मौजूदा) रैपर था जिसने सलाह दी कि कार्य 'साफ' महसूस करें।

तो हैक .. बस 'comint-send-input' के ऊपर 'comint-add-to-input-history' है। मृत आसान है।

;;save command history 
(defadvice comint-add-to-input-history (before pdb-save-history activate compile) 
    "write input ring on exit" 
    (message "%s" cmd) 
    (if (string-match "^e\\(x\\|xi\\|xit\\)?$" cmd) 
    (progn (comint-write-input-ring) 
    (message "history file '%s' written" comint-input-ring-file-name))) 
) 

FYI करें, मैं इतिहास फ़ाइल पर लिखने में डिबगिंग सत्र

;#debugger history 
(defun debug-history-ring (file) 
    (comint-read-input-ring t) 
    (setq comint-input-ring-file-name file) 
    (setq comint-input-ring-size 1000) 
    (setq comint-input-ignoredups t)) 
(let ((hooks '((gdb-mode-hook . (lambda() (debug-history-ring "~/.gdbhist"))) 
     (pdb-mode-hook . (lambda() (debug-history-ring "~/.pythonhist")))))) 
    (dolist (hook hooks) (print (cdr hook)) (add-hook (car hook) (cdr hook)))) 

..और के लिए इनपुट अंगूठी आरंभ करने के लिए इन अगर डिबगिंग बफर मार दिया जाता है

(add-hook 'kill-buffer-hook 'comint-write-input-ring) 

खुश होती है।

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