Gdb'nin komut geçmişini nasıl kaydetmesini sağlayabilirim?


195

gdbKomut geçmişini kaydedecek şekilde nasıl ayarlayabilirim ? Yeni bir gdboturum başlatırken , önceki oturumların komutlarına erişmek için yukarı ok tuşlarını kullanmak istiyorum.


1
Not: .gdbinitDosya linux'da sizden başkaları tarafından yazmaya karşı korunmalıdır.
urzeit

@urzeit - Bence bu Ubuntu gibi dağıtımlarda kayıp bir sebep. Varsayılan olarak herkesin başka birinin ana dizinine girmesine izin verir.
jww

@jww .gdbinitVarsayılan olarak ne olursa olsun ya da ana dizinlerdeki diğer sınırlamalar ne olursa olsun, izinler doğru ayarlanmazsa dosya işlenmez.
urzeit

@urzeit Bir .gdbinitdosya oluşturursanız ve durum böyle değilse, bu sizin umaskgibi bir aklı başında değere ayarlanmadığınız anlamına gelir 022. Daha sonra çok kullanıcılı bir sistemde, .gdbinitdosyanızdan daha büyük sorunlarınız olur .
Kaz

Yanıtlar:


283

Kısa cevap: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


Uzun cevap:

Komut geçmişi GDB kılavuzunda, 22.3 Komut Geçmişinde ele alınmıştır . Bir dosya oluşturun $HOME/.gdbinit, izinlerini değiştirin ve 0600aşağıdaki içeriği ekleyin:

set history save on

Aşağıdakilerle kaydedilmiş geçmiş komutların sayısını ayarlayabilirsiniz. Komut, "gdb'nin geçmiş listesinde tuttuğu komut sayısını ayarlayın. Bu, varsayılan olarak GDBHISTSIZE ortam değişkeninin değerine veya bu değişken ayarlanmamışsa 256'ya ayarlanır. GDBHISTSIZE sayısal olmayan değerleri göz ardı edilir. boyut sınırsız veya GDBHISTSIZE negatif bir sayı veya boş bir dize ise, gdb geçmiş listesinde tuttuğu komutların sayısı sınırsızdır " .

set history size <size>

İlgili bir komut set history remove-duplicates <count>. Komut, "Komut geçmişi listesindeki yinelenen geçmiş girişlerinin kaldırılmasını denetleme. Sayım sıfırdan farklıysa, gdb son sayım geçmişi girişlerine geri bakar ve geçerli girişin kopyası olan ilk girdiyi kaldırır. msgstr "% s: Komut geçmişi listesine eklendi. Sayım sınırsızsa, bu görünüm bağlantısı sınırlandırılmaz. Sayım 0 ise, yinelenen geçmiş girişlerinin kaldırılması devre dışı bırakılır" .

set history remove-duplicates <count>

Varsayılan olarak, gdb geçmişi geçerli dizindeki ./.gdb_history dosyasına kaydeder . Komut geçmişinizin bulunduğunuz dizine bağlı olmamasını istiyorsanız, şunları da ekleyin:

set history filename ~/.gdb_history

4
Sadece bunu kendim için öğrendim ve bunu SO'da paylaşacağımı düşündüm.
Frank

3
Bir dahaki sefere, topluluk dışı wiki gibi kendi kendine cevaplanan sorular oluşturmak tamamen meşru. :)
Greg Hewgill

@Frank yazıp nsonra yukarı ok tuşuna basarsam , önceki tüm komutları alıyorum n.
SIFE

GDB 8.0.1'de bu, özel dosya izinleri olmadan çalışıyor gibi görünüyor.
Ryan1729

7

Hâlâ sorun yaşıyorsanız, HISTSIZE ortam değişkeninizin uygun yüksek bir sayı olduğundan emin olun. Benimki boştu, gdb'nin "geçmiş boyutu" ayarının varsayılan 0 olmasına neden oldu.

Katma

export HISTSIZE=100000000

~ / .bashrc'ye ve her şey şişti

Gdb geçmiş ayarlarınızı (gdb içinde) "geçmişi göster" seçeneğini kullanarak kontrol edebilirsiniz:

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.

Gönderen docs :

ayarlanan tarih boyutu boyut
kümesi geçmişi boyutu sınırsız
Seti GDB onun geçmiş listesinde tutan komutların sayısı. Bu, varsayılan olarak HISTSIZE ortam değişkeninin değerini veya bu değişken ayarlanmamışsa 256 değerini alır. Boyut sınırsızsa GDB'nin geçmiş listesinde tuttuğu komut sayısı sınırsızdır.


Ben de aynı problemi yaşadım. set history size 100.Gdbinit dosyasını koymasına rağmen , HISTSIZE ortam değişkeni hala geçmiş boyutunun sıfıra ayarlanmasına neden oluyordu. Sorun şu ki, gdb HISTSIZE değerinin sınırsız olarak ayarlanabileceğini
DavidW

Gdb'deki HISTSIZE hatası , Haziran 2015 itibarıyla düzeltildi , ancak bu değişikliğin sisteminizde henüz bulunmadığı muhtemel değil. Bu arada, HISTSIZEayarlanırsa> 0 olmalıdır, yoksa gdb geçmişi devre dışı bırakır.
Nate
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.