2010-07-05 12 views
160

मैं gdb कैसे स्थापित कर सकता हूं ताकि यह कमांड इतिहास बचा सके? एक नया gdb सत्र शुरू करते समय मैं पिछले सत्रों के आदेशों तक पहुंचने के लिए तीर कुंजियों का उपयोग करना चाहता हूं।मैं gdb कमांड इतिहास को कैसे सहेज सकता हूं?

+1

नोट: '.gdbinit' फ़ाइल को लिनक्स पर आपके द्वारा दूसरों द्वारा लिखित-संरक्षित होना चाहिए। – urzeit

+0

@urzeit - मुझे लगता है कि उबंटू जैसे distros पर खो गया कारण है। वे डिफ़ॉल्ट रूप से किसी और की होम निर्देशिका में किसी को भी अनुमति देते हैं। – jww

+0

@jww '.gdbinit' फ़ाइल संसाधित नहीं की जाती है अगर अनुमतियां सही तरीके से सेट नहीं की जाती हैं, इससे कोई फर्क नहीं पड़ता कि डिफ़ॉल्ट क्या है या सिस्टम द्वारा होम-निर्देशिकाओं पर अन्य सीमाएं क्या उपयोग की जाती हैं। – urzeit

उत्तर

225

लघु जवाब: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


लांग जवाब:

कमान इतिहास GDB manual, 22.3 Command History में शामिल है। एक फ़ाइल $HOME/.gdbinit बनाएँ, 0600 करने के लिए अपनी अनुमतियों को बदलने, और जोड़ने के निम्नलिखित सामग्री:

set history save on 

आप निम्नलिखित के साथ सहेजा पिछले आदेशों की संख्या निर्धारित कर सकते हैं। आदेश को के रूप में वर्णित किया गया है "जीडीबी अपनी इतिहास सूची में रखे गए आदेशों की संख्या निर्धारित करें। यह पर्यावरण परिवर्तनीय GDBHISTSIZE के मान पर डिफ़ॉल्ट है, या 256 तक यदि यह चर सेट नहीं है। GDBHISTSIZE के गैर-संख्यात्मक मानों को अनदेखा किया जाता है। यदि आकार असीमित है या यदि GDBHISTSIZE या तो ऋणात्मक संख्या या खाली स्ट्रिंग है, तो इतिहास सूची में gdb आदेशों की संख्या असीमित है "

set history size <size> 

एक संबंधित आदेश set history remove-duplicates <count> है। कमांड को के रूप में वर्णित किया गया है "कमांड इतिहास सूची में डुप्लिकेट इतिहास प्रविष्टियों को हटाने पर नियंत्रण रखें। यदि गिनती गैर-शून्य है, तो gdb अंतिम गणना इतिहास प्रविष्टियों पर वापस देखेगा और पहली प्रविष्टि को हटा देगा जो वर्तमान प्रविष्टि का डुप्लिकेट है कमांड इतिहास सूची में जोड़ा जा रहा है। यदि गिनती असीमित है तो यह दिखने वाला असंबद्ध है। यदि गिनती 0 है, तो डुप्लिकेट इतिहास प्रविष्टियों को हटाने को अक्षम किया गया है "

set history remove-duplicates <count> 

डिफ़ॉल्ट रूप से, gdb in the current directory ./.gdb_history फ़ाइल में इतिहास को सहेजता है। आप अपने आदेश इतिहास निर्देशिका पर निर्भर नहीं करना चाहते हैं आप में हैं, भी शामिल हैं:

set history filename ~/.gdb_history 
+4

बस इसे अपने लिए पाया और सोचा कि मैं इसे एसओ पर साझा करूंगा। – Frank

+3

अगली बार, गैर-समुदाय-विकी के रूप में ऐसे उत्तर-उत्तर वाले प्रश्न बनाने के लिए यह पूरी तरह से वैध है। :) –

+0

@ फ्रैंक अगर मैं 'n' टाइप करता हूं तो मैं कुंजी को तीर करता हूं, मुझे पिछले सभी आदेश मिलते हैं जो' n' से शुरू होते हैं। – SIFE

6

आप अभी भी समस्या हो रही है, सुनिश्चित करें कि आपके HISTSIZE वातावरण चर एक उपयुक्त उच्च संख्या है या नहीं। मेरा 0.

के लिए डिफ़ॉल्ट सेटिंग खाली था, gdb के "इतिहास आकार" के कारण जोड़ा गया

export HISTSIZE=100000000 
मेरी ~/.bashrc को

और सब कुछ प्रफुल्लित है

आप के द्वारा अपने gdb इतिहास सेटिंग देख सकते हैं docs से

gdb$ show history 
expansion: History expansion on command input is off. 
filename: The filename in which to record the command history is "/home/xiao/.gdb_history". 
save: Saving of the history record on exit is on. 
size: The size of the command history is 100000000. 

: (gdb के अंदर) "शो इतिहास" कर

सेट इतिहास आकार आकार
सेट इतिहास आकार असीमित
सेट आदेशों की संख्या जो GDB अपने इतिहास सूची में रहता है। यह पर्यावरण परिवर्तनीय HISTSIZE के मान पर डिफ़ॉल्ट है, या 256 पर यह चर सेट नहीं है। यदि आकार असीमित है, तो जीडीबी इतिहास सूची में रखे गए आदेशों की संख्या असीमित है।

+0

मुझे एक ही समस्या थी। .gdbinit फ़ाइल में 'सेट इतिहास आकार 100' डालने के बावजूद, HISTSIZE पर्यावरण चर अभी भी इतिहास आकार को शून्य पर सेट कर रहा था। समस्या यह है कि gdb समझ में नहीं आता है कि [HISTSIZE असीमित पर सेट किया जा सकता है] (http://stackoverflow.com/questions/9457233/unlimited-bash-history) – DavidW

+0

gdb में HISTSIZE बग [निश्चित के रूप में तय किया गया है जून 2015] (https://sourceware.org/bugzilla/show_bug.cgi?id=16999), यह नहीं कि यह परिवर्तन अभी तक आपके सिस्टम पर मौजूद होने की संभावना है। इस बीच, यदि 'HISTSIZE' सेट किया गया है तो यह 0 होना चाहिए, या gdb इतिहास अक्षम कर देगा। –

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