मैं कमांड इतिहास को बचाने के लिए gdb कैसे बना सकता हूं?


195

मैं कैसे सेट कर सकता हूं gdbताकि यह कमांड हिस्ट्री सेव करे? एक नया gdbसत्र शुरू करते समय मैं पिछले सत्रों के कमांड तक पहुंचने के लिए एरो कीज़ का उपयोग करना चाहूंगा।


1
नोट: .gdbinitफाइल को लाइनक्स पर आप की तुलना में दूसरों द्वारा लिखा-संरक्षित किया जाना है।

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

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

@urzeit यदि आप कोई .gdbinitफ़ाइल बनाते हैं और वह स्थिति नहीं है, तो इसका मतलब है कि आपका umaskसमझदार मान सेट नहीं है 022। फिर एक बहु-उपयोगकर्ता प्रणाली में, आपको अपनी .gdbinitफ़ाइल की तुलना में बड़ी समस्याएं हैं ।
काज

जवाबों:


283

संक्षिप्त जवाब: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


लंबा जवाब:

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

set history save on

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

set history size <size>

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

set history remove-duplicates <count>

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

set history filename ~/.gdb_history

4
बस अपने लिए यह पता चला और मैंने सोचा था कि मैं इसे एसओ पर साझा करूंगा।
फ्रैंक

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

@Frank यदि मैं टाइप करता हूं nतो मैं कुंजी को छोड़ता हूं , मुझे पिछले सभी कमांड मिलते हैं जो इसके साथ शुरू होते हैं n
SIFE

GDB 8.0.1 पर यह विशेष फ़ाइल अनुमतियों के बिना काम करता है।
रयान

7

यदि आपको अभी भी परेशानी हो रही है, तो सुनिश्चित करें कि आपका HISTSIZE पर्यावरण चर एक उपयुक्त उच्च संख्या है। मेरा खाली था, जिससे gdb का "इतिहास आकार" डिफ़ॉल्ट 0 पर सेट हो गया।

जोड़ा गया

export HISTSIZE=100000000

मेरे ~ / .bashrc और सब कुछ प्रफुल्लित है

आप (gdb के अंदर) "शो इतिहास" करके अपनी gdb इतिहास सेटिंग्स की जाँच कर सकते हैं:

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 अपनी इतिहास सूची में रखता है। यह पर्यावरण चर HISTSIZE के मान को डिफॉल्ट करता है, या 256 तक यदि यह चर सेट नहीं होता है। यदि आकार असीमित है, तो इतिहास की सूची में GDB के आदेशों की संख्या असीमित है।


मुझे भी यही समस्या थी। set history size 100.Gdbinit फ़ाइल में डालने के बावजूद , HISTSIZE पर्यावरण चर अभी भी इतिहास के आकार को शून्य पर सेट कर रहा था। समस्या यह है कि gdb यह नहीं समझता है कि HISTSIZE को असीमित पर सेट किया जा सकता है
David

Gdb में HISTSIZE बग को जून 2015 तक तय किया गया है , न कि यह परिवर्तन आपके सिस्टम पर अभी भी मौजूद होने की संभावना है। इस बीच, अगर HISTSIZEसेट किया गया है तो इसे 0 होना चाहिए, या जीडीबी इतिहास को अक्षम कर देगा।
नैट आर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.