2010-10-05 12 views
7

मुझे एमडीबी के साथ एमएसीबी का उपयोग करना अच्छा लगता है। और मैं विन्यास है कि मैं के साथ "gdb-कई-खिड़कियों" मिल की तरह सबसे, यहाँ देखा के रूप में:Emacs को अनुकूलित करना GDB

gdb-many-windows

जिसके अनुसार, यह सही नहीं है। मैं वर्तमान में चल रहे थ्रेड दिखाने के लिए एक फ्रेम जोड़ना चाहता हूं। क्या किसी को पता है कि कॉन्फ़िगरेशन को कस्टमाइज़ करना संभव है कि "gdb-many-windows" आपको देता है? या, अगर मैं ऐसा नहीं कर सकता, तो क्या यह मेरे स्वयं के फ्रेम बनाने का एक तरीका है gdb मेरे .emacs में स्वचालित रूप से आता है? मेरे आदर्श सेटअप में धागे, स्टैक ट्रेस, स्थानीय चर और एक बड़ी स्रोत विंडो होगी।

उत्तर

9

gdb-many-windows द्वारा उपयोग की जाने वाली विंडो लेआउट स्पष्ट रूप से gdb-setup-windows में लागू किया गया है। आपको लगता है कि समारोह की सलाह की तरह

(defadvice gdb-setup-windows (around setup-more-gdb-windows activate) 
    ad-do-it 
    (split-window-horizontally) 
    (other-window 1) 
    (gdb-set-window-buffer 
    (gdb-get-buffer-create 'gdb-some-buffer-type))) 
+0

नाइस के ऊपरी-दाएं में कर रहे हैं! हालांकि मुझे भागों के बारे में थोड़ी अधिक जानकारी चाहिए (मैं Emacs-internals में पूरी तरह से धाराप्रवाह नहीं हूं ...)। "चारों ओर" भाग क्या है? "विज्ञापन करते हैं-यह"? – thoni56

+1

तो, "आस-पास" फ़ंक्शन के आसपास इस सलाह को लपेटता है "सेटअप-अधिक-जीडीबी-विंडोज़" (जो शायद सामान्य मामले में खोजने के लिए कठिन चीज होगी) और यह तुरंत इस सलाह को सक्रिय करता है। – thoni56

+1

और "ad-do-it" मूल फ़ंक्शन के लिए प्लेसहोल्डर है, जो प्लेसहोल्डर मौजूद है, जहां भी चलाया जाएगा। – thoni56

3

यह एक बहुत पुरानी पोस्ट है, खिड़कियां स्थापित करने में अतिरिक्त काम करने के लिए कर सकते हैं, फिर भी पालन समाधान किसी की मदद कर सकते हैं।

अनुवर्ती कोड अपने व्यवहार को बदलने, जीडीबी इंटरफ़ेस की शुरुआत और बाहर निकलने पर कब्जा करता है।

gdb शुरुआत (defadvice gdb), यह पहली, वर्तमान लेआउट को बचाने तो gdb चलाने के लिए और अंत में एक नया कस्टम लेआउट तैयार पर (यह अपनी प्राथमिकताएँ के लिए इसे संपादित करने के लिए आसान)

gdb बाहर निकलें (defadvice gdb -reset), यह पहले मूल निकास फ़ंक्शन निष्पादित करता है और फिर सहेजे गए लेआउट को फिर से लोड करता है।

परिणाम gdb-कई-खिड़कियों की एक ही विंडो में शामिल है, वर्तमान चल रहा है धागा छवि

enter image description here

(setq gdb-many-windows nil) 

(defun set-gdb-layout(&optional c-buffer) 
    (if (not c-buffer) 
     (setq c-buffer (window-buffer (selected-window)))) ;; save current buffer 

    ;; from http://stackoverflow.com/q/39762833/846686 
    (set-window-dedicated-p (selected-window) nil) ;; unset dedicate state if needed 
    (switch-to-buffer gud-comint-buffer) 
    (delete-other-windows) ;; clean all 

    (let* (
     (w-source (selected-window)) ;; left top 
     (w-gdb (split-window w-source nil 'right)) ;; right bottom 
     (w-locals (split-window w-gdb nil 'above)) ;; right middle bottom 
     (w-stack (split-window w-locals nil 'above)) ;; right middle top 
     (w-breakpoints (split-window w-stack nil 'above)) ;; right top 
     (w-io (split-window w-source (floor(* 0.9 (window-body-height))) 
          'below)) ;; left bottom 
     ) 
    (set-window-buffer w-io (gdb-get-buffer-create 'gdb-inferior-io)) 
    (set-window-dedicated-p w-io t) 
    (set-window-buffer w-breakpoints (gdb-get-buffer-create 'gdb-breakpoints-buffer)) 
    (set-window-dedicated-p w-breakpoints t) 
    (set-window-buffer w-locals (gdb-get-buffer-create 'gdb-locals-buffer)) 
    (set-window-dedicated-p w-locals t) 
    (set-window-buffer w-stack (gdb-get-buffer-create 'gdb-stack-buffer)) 
    (set-window-dedicated-p w-stack t) 

    (set-window-buffer w-gdb gud-comint-buffer) 

    (select-window w-source) 
    (set-window-buffer w-source c-buffer) 
    )) 
(defadvice gdb (around args activate) 
    "Change the way to gdb works." 
    (setq global-config-editing (current-window-configuration)) ;; to restore: (set-window-configuration c-editing) 
    (let (
     (c-buffer (window-buffer (selected-window))) ;; save current buffer 
     ) 
    ad-do-it 
    (set-gdb-layout c-buffer)) 
) 
(defadvice gdb-reset (around args activate) 
    "Change the way to gdb exit." 
    ad-do-it 
    (set-window-configuration global-config-editing)) 
+0

यह अच्छा है। मैं इसे चोरी करने जा रहा हूं !! –

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