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?

Kevin
sumber
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...

0xC0000022L
sumber
11
Anda juga dapat menggunakan layout nextsetelah memulai secara gdbnormal
khaverim
87

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

POHAN WU
sumber
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
16

Anda juga dapat memulainya dari shell gdb menggunakan perintah "-" (tanda hubung). Tidak yakin bagaimana mematikannya secara dinamis.

Neowizard
sumber
Tampaknya ini yang paling mudah digunakan dan diingat.
Siyuan Ren
2
Anda dapat keluar dengan melakukan salah satu Cx Ca, Cx a, atau Cx A. Lihat stackoverflow.com/questions/14147117/…
dmonopoly
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?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber
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.

alfred
sumber
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.

girardengo
sumber
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

pengguna3042599
sumber
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.

Gumpal
sumber
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