Bagaimana saya bisa membuat gdb menyimpan histori perintah?

195

Bagaimana saya bisa mengatur gdbsehingga menyimpan sejarah perintah? Saat memulai gdbsesi baru , saya ingin menggunakan tombol panah ke atas untuk mengakses perintah dari sesi sebelumnya.

jujur
sumber
1
Catatan: .gdbinitFile tersebut harus dilindungi oleh orang lain selain Anda di linux.
urzeit
@urzeit - Saya pikir itu penyebab hilang pada distro seperti Ubuntu. Mereka mengizinkan siapa saja masuk ke direktori home orang lain secara default.
jww
@jww .gdbinitFile tidak diproses jika izin tidak diatur dengan benar, tidak peduli apa standarnya atau apa batasan lain pada direktori home yang digunakan oleh sistem.
urzeit
@urzeit Jika Anda membuat .gdbinitfile dan bukan itu masalahnya, itu berarti Anda umasktidak disetel ke nilai waras seperti 022. Kemudian dalam sistem multi-pengguna, Anda memiliki masalah lebih besar dari sekadar .gdbinitfile Anda .
Kaz

Jawaban:

283

Jawaban singkat: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


Jawaban panjang:

Riwayat perintah dicakup dalam manual GDB, 22,3 Riwayat Perintah . Buat file $HOME/.gdbinit, ubah izinnya 0600, dan tambahkan konten berikut:

set history save on

Anda dapat mengatur jumlah perintah sebelumnya yang disimpan dengan yang berikut ini. Perintah ini digambarkan sebagai "Tetapkan jumlah perintah yang disimpan gdb dalam daftar riwayatnya. Ini default ke nilai variabel lingkungan GDBHISTSIZE, atau 256 jika variabel ini tidak disetel. Nilai-nilai non-numerik dari GDBHISTSIZE diabaikan. Jika ukuran tidak terbatas atau jika GDBHISTSIZE adalah angka negatif atau string kosong, maka jumlah perintah yang disimpan dalam daftar sejarah tidak terbatas " .

set history size <size>

Perintah terkait adalah set history remove-duplicates <count> . Perintah ini digambarkan sebagai "Kontrol penghapusan entri riwayat duplikat dalam daftar riwayat perintah. Jika jumlah tidak nol, gdb akan melihat kembali pada entri riwayat jumlah terakhir dan menghapus entri pertama yang merupakan duplikat dari entri saat ini menjadi ditambahkan ke daftar riwayat perintah. Jika jumlah tidak terbatas maka tampilan ini tidak terikat. Jika jumlah adalah 0, maka penghapusan entri riwayat duplikat dinonaktifkan " .

set history remove-duplicates <count>

Secara default, gdb menyimpan histori ke dalam file ./.gdb_history di direktori saat ini . Jika Anda ingin riwayat perintah Anda tidak bergantung pada direktori tempat Anda berada, sertakan juga:

set history filename ~/.gdb_history
jww
sumber
4
Hanya menemukan ini untuk diri saya sendiri dan berpikir saya akan membagikannya di SO.
Frank
3
Untuk waktu berikutnya, sah-sah saja membuat pertanyaan yang dijawab sendiri seperti non-komunitas-wiki. :)
Greg Hewgill
@ Terus Bagaimana jika saya mengetik nmaka saya panah ke atas, saya mendapatkan semua perintah sebelumnya yang dimulai dengan n.
SIFE
Pada GDB 8.0.1 ini tampaknya berfungsi tanpa izin file khusus.
Ryan1729
7

Jika Anda masih mengalami masalah, pastikan variabel lingkungan HISTSIZE Anda adalah angka yang cukup tinggi. Milik saya kosong, menyebabkan pengaturan "ukuran sejarah" gdb ke default menjadi 0.

Ditambahkan

export HISTSIZE=100000000

ke ~ / .bashrc saya dan semuanya membengkak

Anda dapat memeriksa pengaturan riwayat gdb dengan melakukan (di dalam gdb) "tampilkan riwayat":

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.

Dari dokumen :

set ukuran sejarah ukuran
ukuran sejarah set terbatas
Set jumlah perintah yang GDB terus dalam daftar sejarah. Ini default ke nilai variabel lingkungan HISTSIZE, atau 256 jika variabel ini tidak disetel. Jika ukuran tidak terbatas, jumlah perintah yang disimpan GDB dalam daftar riwayat tidak terbatas.

Xiao
sumber
Saya memiliki masalah yang sama. Meskipun memasukkan set history size 100file .gdbinit, variabel lingkungan HISTSIZE masih menyebabkan ukuran histori diatur ke nol. Masalahnya adalah bahwa gdb tidak mengerti bahwa HISTSIZE dapat disetel menjadi tidak terbatas
DavidW
Bug HISTSIZE di gdb telah diperbaiki pada Juni 2015 , bukan berarti perubahan ini mungkin ada pada sistem Anda. Sementara itu, jika HISTSIZEdisetel harus> 0, atau gdb akan menonaktifkan histori.
Nate R.