gdb membagi tampilan dengan kode


111

Saya baru saja men-debug program di gdb dan entah bagaimana saya menemukan fitur baru yang belum pernah saya lihat atau bahkan dengar sebelumnya, tampilan terpisah di mana saya dapat melihat dan menelusuri kode selain memberikan perintah:

Maaf tentang gambarnya, tetapi ttys tidak memiliki tangkapan layar.

Apa ini? Apa yang saya lakukan, atau, lebih spesifiknya, bagaimana saya bisa mendapatkan mode layar terbagi ini lagi? Apakah ada nama untuk mode ini, atau di mana saya dapat membaca tentang cara menggunakannya?


2
Untuk referensi cepat: Anda dapat keluar dari mode ini menggunakan salah satu Cx Ca, Cx a, atau Cx A.` Lihat pertanyaan ini .
Richard

Jawaban:


95

Ini disebut TUI (tidak main-main). Mulai misalnya dengan gdbtuiatau gdb -tui...


11
Anda juga dapat menggunakan layout nextsetelah memulai secara gdbnormal
khaverim

87

Anda dapat memicunya secara dinamis dengan menekan ctrl+ xdan ctrl+ a.


terima kasih @ user146043, ini tampaknya satu-satunya cara jika Anda menjalankan layar pada saat yang sama dengan ctrl-a adalah cara untuk memulai perintah layar!
olik79

Sepertinya kamu juga bisa menutup kombo itu!
Nick Desaulniers



15

Dasbor GDB

https://github.com/cyrus-and/gdb-dashboard

Dasbor GDB menggunakan API Python GDB resmi dan mencetak informasi yang Anda inginkan ketika GDB berhenti misalnya setelah next, seperti perintah aslidisplay .

Vs TUI:

  • lebih kuat, karena hanya mencetak ke stdout daripada menempatkan shell pada status kutukan yang lebih ajaib, misalnya:

  • sangat dapat dikonfigurasi dari Python: Anda dapat memilih apa yang ingin Anda keluaran dan seberapa besar setiap bagian tergantung pada apa yang Anda debug.

    Tampilan yang paling berguna sudah diimplementasikan: source, assembly, register, stack, memori, utas, ekspresi ... tetapi seharusnya mudah untuk memperluasnya dengan informasi apa pun yang diekspos di GDB Python API.

    TUI hanya memungkinkan menampilkan dua dari sumber, perakitan dan register dan hanya itu. Kecuali jika Anda ingin memodifikasi kode sumber C-nya tentunya ;-)

masukkan deskripsi gambar di sini

Saya percaya bahwa GDB harus dikirimkan dengan pengaturan seperti itu di luar kotak dan diaktifkan secara default, itu akan menarik lebih banyak pengguna dengan cara itu.

Oh, dan pengembang utama, Andrea Cardaci , sangat responsif dan luar biasa. Pujian besar.

Lihat juga: Bagaimana cara menyorot dan mewarnai keluaran gdb selama debugging interaktif?


2
Tidak ada cukup kata untuk menggambarkan betapa hebatnya itu. Terima kasih :)
unresolved_external

11

Ketik layoutsebagai perintah di gdb dan jendela terpisah akan ditampilkan.


5

Saat GDB dalam mode standar, penggunaan winakan secara otomatis beralih ke mode TUI.
Perintah lain untuk mode TUI:

  • info win
    Buat daftar dan berikan ukuran semua jendela yang ditampilkan.
  • focus next | prev | src | asm | regs | split
    Atur fokus ke jendela bernama. Perintah ini memungkinkan untuk mengubah jendela aktif sehingga tombol gulir dapat terpengaruh ke jendela lain.

Baca di sini untuk bantuan lebih lanjut.


2

Ada juga alat antarmuka untuk GDB yang disebut cgdb. Bahkan dengan beberapa penyorotan warna. "ESC" untuk beralih ke tampilan kode, "i" untuk beralih kembali ke gdb

cgdb


1

Mode tui jelas-jelas terinspirasi oleh emacs - Saya menemukannya secara tidak sengaja ketika saya menekan ^ Xo, yang beralih di antara jendela terpisah di emacs - Saya terkadang menekannya dengan linglung ketika apa yang seharusnya saya lakukan adalah beralih ke program lain. Bagaimanapun, itu mengarah ke fitur lain yang belum disebutkan, yaitu Anda dapat memindahkan kursor dari jendela kode (di mana Anda dapat menggulir) ke baris perintah, atau sebaliknya, dengan ^ Xo.


Jelas sebagian besar program dari GNU memiliki emacs seperti keybindings, terutama karena alasan konsistensi. Saya tahu ada mode vi di bash, tapi itu tidak cukup baik sebagai mode emacs.
klaus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.