Bagaimana cara menyoroti dan mewarnai keluaran gdb selama debugging interaktif?
172
Tolong jangan balas saya harus menggunakan ddd, nemiver, emacs, vim, atau front-end lainnya, saya hanya lebih suka gdb, tetapi ingin melihat outputnya dengan beberapa warna terminal.
Ini tidak akan memberi Anda warna (jadi saya tidak akan menyebut ini sebagai Jawaban), tetapi beberapa konfigurasi ~ / .gdbinit akan meningkatkan pengalaman. Saya menggunakan ini sebagai minimum: mengatur riwayat simpan pada set cetak cantik set output-radix 16 set tinggi 0
activout.se
Akan menyenangkan untuk mengubah jawaban yang diterima sehingga jawaban saya yang lama dan salah dapat dihapus. Terima kasih.
Mengikuti konsep yang sama, GDB Dashboard menyediakan antarmuka visual modular untuk GDB dengan Python.
(batal) walker
Proyek serupa lainnya menggunakan dukungan Python GDB untuk memberikan lebih banyak ekstensibilitas, jadi ini patut dicoba: https://github.com/dholm/voidwalker
@dholm juga menyediakan .gdbinit miliknya terinspirasi dari yang sebelumnya.
pwndbg
Beberapa proyek menyediakan serangkaian fungsi yang berguna, termasuk tampilan yang ditingkatkan. Ini adalah kasus untuk PEDA atau pwndbg . Yang terakhir memberikan deskripsi berikut:
Penggantian PEDA. Dalam semangat teman baik kita windbg, pwndbgdiucapkan pwnd-bag.
Mempercepat
Kegembiraan
Kode bersih
Ini memberikan perintah untuk mendukung debugging dan mengeksploitasi pengembangan yang mirip dengan yang dari PEDA, dan tampilan yang lebih baik (meskipun ini bukan fokus utama proyek). Perangkat lunak ini masih dalam pengembangan, dan belum dirilis dengan benar.
Voltron adalah UI debugger yang dapat dikembangkan untuk peretas. Ini memungkinkan Anda untuk melampirkan tampilan utilitas yang berjalan di terminal lain ke debugger Anda (LLDB atau GDB), menampilkan informasi bermanfaat seperti pembongkaran, menumpuk konten, nilai register, dll, sambil tetap memberi Anda CLI debugger yang sama seperti yang biasa Anda gunakan.
Anda dapat memodifikasi Anda .gdbinituntuk secara otomatis mengintegrasikannya. Namun, tampilan itu sendiri berada di luar GDB (misalnya dalam split tmux).
Ini bertujuan untuk digunakan sebagian besar oleh para eksploit dan insinyur-balik, untuk menyediakan fitur tambahan untuk GDB menggunakan API Python untuk membantu selama proses analisis dinamis dan mengeksploitasi pengembangan.
banyak terima kasih atas jawaban Anda, apakah Anda punya ide cara mematikan register output? (Saya menggunakan gdb untuk kode C ++ dan tidak memerlukan level assembler segera)
vak
Iya. Sialan "Panjang komentar minimal harus 15 karakter."
vak
1
@vak sudah coba set $SHOWCPUREGISTERS = 0? Pada dasarnya Anda memiliki beberapa parameter yang dapat Anda atur , dan Anda selalu dapat memodifikasi kode sesuai dengan kebutuhan Anda.
BenC
100
Ini bukan warna, tetapi pertimbangkan gui teks gdb . Itu membuat perbedaan besar untuk bagaimana gdb dapat digunakan.
Anda dapat meluncurkannya dengan:
gdb -tui executable.out
Tangkapan layar:
Seperti yang Anda lihat, fitur utamanya adalah:
menunjukkan garis sumber mana yang kita pakai dan garis sekitarnya
Wow! Terima kasih! Saya sudah lama mencari shell grafis yang bagus di sekitar gdb, dan saya sudah mencoba xxgdb, kgdb, dan ddd, tapi tidak ada yang bekerja dengan baik untuk saya, jadi saya terjebak dengan antarmuka baris perintah yang lama. Tapi ini benar-benar sempurna!
Thomas Padron-McCarthy
46
Ctrl-x Ctrl-a: Masukkan ini untuk beralih ke dan dari mode teks gui, bekerja bahkan tanpa opsi baris perintah.
jturcotte
2
Mencetak ke stdout dari program merusak antarmuka untuk saya. Adakah solusi selain mengarahkannya?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
Saya mendapatkan masalah yang sama dengan stdout merusak antarmuka. Ctrl-L atau apa pun redraw mengikat Anda membuatnya setidaknya dapat digunakan. Untuk orang-orang dengan mode edit vi diaktifkan, Ctrl-X Ctrl-A tidak berfungsi, tetapi perintah 'layout src' akan menempatkan Anda dalam mode TUI dengan sumber yang ditampilkan seperti gambar.
wilywampa
1
Buka terminal kedua dan kemudian jalankan perintah: $ tty Gunakan hasilnya untuk mengarahkan stdout dari sesi gdb ke terminal itu menggunakan (gdb) atur perintah inferior-tty. ex. dari .gdbinit saya atur inferior-tty / dev / tty2 sekarang stdout Anda tidak akan mengacaukan $ gdb -tui.
netskink
46
Saya tahu Anda tidak ingin frontend. Tetapi bagaimana dengan cgdb sangat dekat dengan gdb, itu adalah textmode tetapi memiliki jendela sumber di atas dengan highlight sintaks pada kode.
Hanya mencoba menjalankannya: ia tidak melihat riwayat gdb, dan ia juga memiliki prompt kacau, di mana ada beberapa spasi putih antara tanda sisipan dan tempat aktual di mana simbol diketik (ini kemungkinan karena saya memiliki prompt berwarna di gdb ) . Tidak terkesan sama sekali.
Hi-Angel
19
Dimungkinkan untuk sangat meningkatkan tampilan gdb melalui penggunaan warna. Ini dilakukan melalui salah satu metode berikut:
Prompt berwarna melalui "set prompt". Misalnya, buat perintah tebal dan merah:
set prompt \033[1;31m(gdb) \033[m
atau buat prompt bentuk baru, tebal dan merah:
set prompt \033[01;31m\n\n#####################################> \033[0m
Perintah berwarna melalui kait
Penyorotan sintaksis berwarna dari perintah "daftar".
Semua contoh tersedia di posting blog berikut yang ditulis oleh Michael Kelleher:
@ Mike: akan bermanfaat untuk memposting konten tautan tersebut di sini karena situs tidak lagi dapat diakses dan robots.txt mencegah archive.org mengindeksnya.
Gaya terminal sekarang tersedia untuk CLI dan TUI. Sorotan Sumber GNU juga dapat digunakan untuk memberikan gaya potongan kode sumber. Lihat perintah "set style", di bawah, untuk informasi lebih lanjut.
Jawaban terbaik yang pernah ada! Anda dapat menemukan di sini tutorial tentang cara menginstal gdb 8.3medium.com/@simonconnah/… , perhatikan mesin Anda membutuhkan setidaknya 512MB RAM, jika tidak, gcckompiler akan mulai membuang.
pengguna
7
#into .gdbinit
shell mkfifo /tmp/colorPipe
define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-disassemble
hookpost-list
end
define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-list
set logging off
set logging redirect off
shell sleep 0.1s
end
define hook-quit
shell rm /tmp/colorPipe
end
define re
hookpost-disassemble
echo \033[0m
end
document re
Restore colorscheme
end
Peringatan: Buggy. Tidak ada dukungan TUI, hack 'mode pengguna'.
Menemukan bagian utama di sini
dan memodifikasinya sedikit. Perlu sorotan, c ++ filt. Jika warna menjadi kacau masalah ulang perintah.
Sepakat. Garis-garis sederhana yang dicetak oleh program saya menghancurkan konsol gdb -tui. Ini tidak terjadi di bawah cgdb. Terima kasih atas tipnya!
Kemudian proses stack_tracedengan regex Python, dan cetaklah. Warna-warna berani dan lainnya diperoleh dengan fungsi seperti ini:
def term_style(*v):"""1 is bold, 30--37 are the 8 colours, but specifying bold may also
change the colour. 40--47 are background colours."""return'\x1B['+';'.join(map(str, v))+'m'#Use like this:print term_style(1)+'This will be bold'+ term_style(0)#Reset.print term_style(1,30)+'This will be bold and coloured'+ term_style(0)print term_style(1,30,40)+'Plus coloured background'+ term_style(0)
Contoh kerja yang menggunakan kait - bahkan jika minim - mungkin akan lebih diterima.
Hi-Angel
4
Kombinasi warna lain yang baik diberikan oleh konfigurasi ini . Itu membuat memeriksa backtraces jauh lebih mudah. Untuk menggunakannya, cukup simpan file itu ~/.gdbinitdan jalankan gdb secara normal
Terima kasih, inilah tepatnya yang saya cari. Saya melihat ke dalam aplikasi multi-threaded dengan panggilan panjang dan ini sangat cocok untuk backtraces tersebut.
Johan Bjäreholt
-2
Anda bisa mendapatkan warna apa pun yang Anda inginkan;
# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal
l
diimplementasikan sourceware.org/bugzilla/show_bug.cgi?id=21044 , saya hanya akan menambahkanl
kehook-stop
dan masukkan Dev Nirvana.Jawaban:
.gdbinit
Anda dapat men-tweak Anda
~/.gdbinit
untuk memiliki warna. Anda dapat menggunakan mammon.gdbinit
yang tersedia di sini:https://github.com/gdbinit/gdbinit
Anda dapat men-tweak sebanyak yang Anda inginkan juga. Saya menemukan ini berkat jawaban SO ini . Berikut jenis output yang dapat Anda peroleh:
Repositori GitHub juga tersedia: https://github.com/gdbinit/Gdbinit
Di samping catatan, ide yang sama juga diterapkan pada lldb .
Dasbor GDB
Mengikuti konsep yang sama, GDB Dashboard menyediakan antarmuka visual modular untuk GDB dengan Python.
(batal) walker
Proyek serupa lainnya menggunakan dukungan Python GDB untuk memberikan lebih banyak ekstensibilitas, jadi ini patut dicoba: https://github.com/dholm/voidwalker
@dholm juga menyediakan .gdbinit miliknya terinspirasi dari yang sebelumnya.
pwndbg
Beberapa proyek menyediakan serangkaian fungsi yang berguna, termasuk tampilan yang ditingkatkan. Ini adalah kasus untuk PEDA atau pwndbg . Yang terakhir memberikan deskripsi berikut:
Ini memberikan perintah untuk mendukung debugging dan mengeksploitasi pengembangan yang mirip dengan yang dari PEDA, dan tampilan yang lebih baik (meskipun ini bukan fokus utama proyek). Perangkat lunak ini masih dalam pengembangan, dan belum dirilis dengan benar.
voltron
The proyek deskripsi negara:
Anda dapat memodifikasi Anda
.gdbinit
untuk secara otomatis mengintegrasikannya. Namun, tampilan itu sendiri berada di luar GDB (misalnya dalam split tmux).GEF
GEF adalah pilihan lain, dan digambarkan sebagai:
sumber
set $SHOWCPUREGISTERS = 0
? Pada dasarnya Anda memiliki beberapa parameter yang dapat Anda atur , dan Anda selalu dapat memodifikasi kode sesuai dengan kebutuhan Anda.Ini bukan warna, tetapi pertimbangkan gui teks gdb . Itu membuat perbedaan besar untuk bagaimana gdb dapat digunakan.
Anda dapat meluncurkannya dengan:
Tangkapan layar:
Seperti yang Anda lihat, fitur utamanya adalah:
sumber
Saya tahu Anda tidak ingin frontend. Tetapi bagaimana dengan cgdb sangat dekat dengan gdb, itu adalah textmode tetapi memiliki jendela sumber di atas dengan highlight sintaks pada kode.
sumber
Dimungkinkan untuk sangat meningkatkan tampilan gdb melalui penggunaan warna. Ini dilakukan melalui salah satu metode berikut:
Prompt berwarna melalui "set prompt". Misalnya, buat perintah tebal dan merah:
set prompt \033[1;31m(gdb) \033[m
atau buat prompt bentuk baru, tebal dan merah:
set prompt \033[01;31m\n\n#####################################> \033[0m
Perintah berwarna melalui kait
Semua contoh tersedia di posting blog berikut yang ditulis oleh Michael Kelleher:
"Beautify GDB", 12 Mei 2010 (via archive.org)
"Penyorotan sintaksis GDB Eksperimental", 15 Mei 2010 (via archive.org)
sumber
Baru di GDB 8.3 mendatang !
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
sumber
gdb 8.3
medium.com/@simonconnah/… , perhatikan mesin Anda membutuhkan setidaknya 512MB RAM, jika tidak,gcc
kompiler akan mulai membuang.Peringatan: Buggy. Tidak ada dukungan TUI, hack 'mode pengguna'.
Menemukan bagian utama di sini dan memodifikasinya sedikit. Perlu sorotan, c ++ filt. Jika warna menjadi kacau masalah ulang perintah.
sumber
cgdb
jauh lebih baik daripadagdb -tui
sumber
Rapi, saya baru saja menemukan retasan ini menggunakan colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
sumber
bash: colout: command not found
ketika saya menjalankanbt f
Saya ingin menyoroti sebagai berikut: menekankan garis-garis jejak tumpukan yang milik file sumber saya (bukan perpustakaan).
Solusinya adalah menggunakan gdb-python (di MSYS; di Linux biasanya sudah
gdb
dilengkapi dengan Python built-in?), Hookbacktrace
, gunakanKemudian proses
stack_trace
dengan regex Python, dan cetaklah. Warna-warna berani dan lainnya diperoleh dengan fungsi seperti ini:sumber
Kombinasi warna lain yang baik diberikan oleh konfigurasi ini . Itu membuat memeriksa backtraces jauh lebih mudah. Untuk menggunakannya, cukup simpan file itu
~/.gdbinit
dan jalankan gdb secara normalsumber
Anda bisa mendapatkan warna apa pun yang Anda inginkan;
sumber