OK, info break mencantumkan breakpoints, tetapi tidak dalam format yang akan bekerja dengan baik dengan menggunakan mereka kembali menggunakan - perintah seperti pada pertanyaan ini . Apakah GDB memiliki metode untuk membuangnya ke file yang dapat diterima untuk input lagi? Terkadang dalam sesi debugging, perlu untuk memulai kembali GDB setelah membangun satu set breakpoint untuk pengujian.
File .gdbinit memiliki masalah yang sama dengan --command. Perintah info break tidak mencantumkan perintah, melainkan tabel untuk konsumsi manusia.
Untuk menguraikan, berikut adalah contoh dari info break :
(gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0x08048517 <foo :: bar (void) +7>
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
set breakpoint pending on
seperti yang dijelaskan dalam cara menjawab Y dalam skrip gdb dan gdb: cara mengatur breakpoint pada pustaka bersama di masa mendatang dengan --command flagbreak g_log if log_level==G_LOG_LEVEL_CRITICAL
), maka setidaknya gdb 7.8.1 akan berhenti mem-parsing perintah lebih lanjut. Jika Anda memiliki perintah tambahan yang harus dijalankan untuk breakpoint itu, letakkancommands
baris sebelumcondition
baris.Jawaban ini sudah usang. GDB sekarang mendukung penyimpanan secara langsung. Lihat jawaban ini .
Anda dapat menggunakan pencatatan:
File breaks.txt sekarang berisi:
Menulis skrip AWK yang mengubahnya menjadi format yang berguna untuk file
.gdbinit
atau--command
mudah. Atau Anda bahkan dapat membuat skrip memancarkan terpisah--eval-command
ke baris perintah GDB ...Menambahkan makro kecil ini ke .gdbinit akan membantu Anda melakukannya:
sumber
save breakpoints
perintah.Masukkan perintah dan breakpoint GDB Anda dalam file .gdbinit sama seperti Anda mengetiknya di
gdb>
prompt, dan GDB akan secara otomatis memuat dan menjalankannya saat startup. Ini adalah file per direktori, sehingga Anda dapat memiliki file yang berbeda untuk proyek yang berbeda.sumber
Perpanjangan ke perpanjangan anon ke jawaban Johannes :
Dengan
brestore
Anda kemudian dapat mengembalikan breakpoint yang disimpanbsave
.sumber
Ekstensi ke jawaban dari Johannes : Anda dapat secara otomatis memformat ulang output
info break
menjadi file perintah GDB yang valid:Setelah itu Anda memiliki file perintah yang valid di
brestore.gdb
.Ini berfungsi untuk saya ketika aplikasi dikompilasi dengan
-g
.Saya juga berhasil mengujinya dengan GDB v6.8 di Ubuntu 9.10 (Karmic Koala).
sumber
Mungkin ini:
save breakpoints [filename]
sumber
Masukkan berikut ini di ~ / .gdbinit untuk mendefinisikan bsave dan brestore sebagai perintah GDB untuk menyimpan- dan mengembalikan breakpoints.
sumber
Saya juga mendapatkan kesalahan / peringatan ini di GDB ketika mencoba mengaktifkan logging dalam mode TUI . Namun, logging tampaknya berfungsi ketika dalam mode "non-TUI". Jadi saya meninggalkan mode TUI setiap kali saya ingin mencatat sesuatu. (Beralih bolak-balik ke mode TUI dengan Ctrl+X , Ctrl+A ).
Begini cara saya bekerja:
set logging on
- sekarang seharusnya tidak mengeluh.sumber
Saya menemukan tambahan berikut untuk jawaban sebelumnya yang berguna untuk menyimpan / memuat breakpoint ke file tertentu.
Seperti pada jawaban sebelumnya, tambahkan kode berikut ke file ~ / .gdbinit
sumber
Masalahnya adalah bahwa menetapkan breakpoint adalah konteks sensitif. Bagaimana jika Anda memiliki dua fungsi statis bernama foo ?
Jika Anda telah men-debug salah satu modul yang mendefinisikan foo, maka GDB akan menganggap Anda bermaksud melakukannya. Tetapi jika Anda hanya membuang "break foo" ke dalam file dan kemudian membaca file itu saat start-up, tidak akan jelas fungsi foo yang Anda maksud.
sumber
Ada ide lain? Saya punya
setelah
EDIT:
Saya tahu pertanyaan itu adalah "bagaimana cara menyimpan daftar breakpoints", namun saya baru saja menemukan, bahwa dengan GDB kita dapat dengan mudah mengatur breakpoint "save in file" oleh
di mana
breakpoints.txt
file seperti ini:sumber