- Seer adalah front-end untuk mengoperasikan GDB lewat GUI di Linux, dan sedang aktif dikembangkan dengan tujuan menghadirkan GUI untuk GDB yang sederhana sekaligus enak dilihat
- Instalasi dapat dilakukan lewat manajer paket atau build dari source, dengan persyaratan Linux, C++17, GDB dengan dukungan interpreter MI, CMake 3.5.0 atau lebih baru, dan Qt6
- Qt5 tidak lagi dapat dikompilasi dari source tree terbaru, dan source tree 2.3 adalah tree terakhir yang masih bisa dikompilasi dengan Qt5, sementara v1.17 adalah rilis Qt5 terakhir
- Seer menyediakan penelusuran source, tampilan variabel dan register, pengelolaan breakpoint, watchpoint, catchpoint, printpoint, tampilan stack dan thread, serta reverse debugging GDB melalui GUI
- Fitur tambahan mencakup tampilan assembly, visualisasi memori, array, struct, dan gambar, serta konsol input/output program yang berjalan agar pekerjaan debugging GDB bisa ditangani secara visual
Gambaran proyek
- Seer adalah front-end GUI GDB untuk Linux
- Tujuannya adalah menyediakan GUI yang sederhana dan enak dilihat untuk GDB
- Proyek ini sedang aktif dikembangkan, dan bug atau fitur yang diinginkan dapat disampaikan lewat email atau issue GitHub
Instalasi dan persyaratan
- Seer dapat dipasang melalui manajer paket atau build dari source
- Persyaratan:
- Linux
- C++17
- GDB yang mendukung interpreter
mi- Perintah pengecekan:
gdb --interpreter=mi
- Perintah pengecekan:
- CMake 3.5.0 atau lebih baru
- Qt6
- Saat build dari source, dibutuhkan paket pengembangan Qt6 yang sesuai dengan distribusi yang digunakan
- Modul Qt6 yang diperlukan adalah Core, Gui, Widgets, PrintSupport, Charts, dan Svg
- Panduan build Qt6: Building Seer - Qt6
- Batasan terkait Qt5:
-
Seer tidak lagi dikompilasi dengan Qt5
- Source tree 2.3 adalah tree terakhir yang bisa dikompilasi dengan Qt5
- Panduan build Qt5: Building Seer - Qt5
-
Jalur instalasi paket
- Pamac di Manjaro:
pamac install seer
- zypper di openSUSE Tumbleweed:
zypper install seergdb
- Flathub:
- io.github.epasveer.seer
flatpak install flathub io.github.epasveer.seer
- Versi beta Flatpak:
- Seer release page
- Unduh dan pasang
seer.flatpak - Untuk menjalankan GDB dari
GDB Launcher, diperlukanflatpak-spawn --host
Rilis dan transisi Qt
- Kabar terbaru dapat dilihat di Seer Wiki
- v1.17 adalah rilis Qt5 terakhir
- Rilis berikutnya adalah v2.0, berbasis Qt6
- Untuk sementara masih bisa dikompilasi dengan Qt5, tetapi jika membutuhkan source Qt5 stabil terbaru, harus menggunakan v1.17
Cara menjalankan
- Seer dibuat agar program yang akan di-debug mudah dijalankan dari command line
- Karena GDB mendukung debugging program dengan berbagai cara, Seer juga menyediakan beberapa mode menjalankan
- Cara menjalankannya dapat dilihat di wiki Starting Seer
Susunan GUI utama
-
Source/Function/Types/Variables/Libraries
- Menampilkan daftar file source dan header yang digunakan program
- Dapat mencari fungsi, tipe, dan variabel statis
- Klik ganda untuk membuka file source
- Menampilkan daftar shared library yang dirujuk program
- Daftar file source dan header dapat dipersempit lewat pencarian
-
Variable/Register Info
- Menampilkan nilai variabel dan register
- Logger mencatat nilai variabel
- Tracker menampilkan nilai variabel yang ditentukan setiap kali GDB mencapai titik berhenti seperti step, next, atau finish
- Registers menampilkan nilai semua register CPU
-
Code Manager
- Ini adalah area besar di tengah GUI Seer yang menampilkan file source dalam tab
^Fdapat digunakan untuk mencari teks di dalam file- Nama variabel bisa diklik ganda untuk ditambahkan ke Logger
- Klik ganda
CTRLmenambahkan*di depan variabel - Klik ganda
SHIFTmenambahkan&di depan variabel - Klik ganda
CTRL+SHIFTmenambahkan*&di depan variabel
- Klik ganda
- Menu klik kanan dapat menambahkan variabel ke Tracker atau Memory Visualizer
- Dapat membuat breakpoint atau printpoint pada baris tertentu
- Dapat menjalankan program hingga baris tertentu
- Tab dapat dipisahkan dengan klik ganda
Kontrol debugging dan tampilan status eksekusi
- Area bawah menangani breakpoint, watchpoint, catchpoint, printpoint, perintah GDB manual, dan log
- Pada tab perintah manual, perintah GDB atau GDB/MI bisa dimasukkan langsung
- Perintah yang dimasukkan akan diingat untuk penggunaan Seer berikutnya
- Breakpoint manager membuat dan mengelola breakpoint
- Watchpoint manager memantau akses ke variabel
- Bisa memantau baca, tulis, atau baca-tulis
- Catchpoint manager menghentikan eksekusi saat pemanggilan throw, rethrow, dan catch di C++
- Printpoint manager dapat mencetak variabel pada titik tertentu seperti
dprintfmilik GDB - GDB output mencatat keluaran dari program GDB itu sendiri
- Seer output mencatat keluaran diagnostik dari program Seer
- Informasi stack frame:
- Daftar frame dapat diklik ganda untuk mengubah scope fungsi saat ini
- Menampilkan argumen fungsi pada tiap frame
- Menampilkan nilai variabel lokal dari fungsi saat ini
- Informasi thread:
- Menampilkan daftar semua ID thread
- ID thread dapat diklik ganda untuk mengubah scope thread saat ini
- Menampilkan stack frame dari tiap thread
- Mendukung mode Reverse Debugging milik GDB
- Perekaman perintah dapat dinyalakan atau dimatikan
- Arah replay dapat diatur ke forward atau reverse
Konsol dan tampilan assembly
- Seer Console menampilkan semua keluaran teks dari executable
- Input teks untuk executable juga bisa dimasukkan dari konsol
- Assembly View menambahkan tab di samping tab source code untuk menampilkan assembly yang sedang dijalankan
- Aktifkan dari
View->Assembly View - Breakpoint juga bisa disetel dari tab assembly
- Instruksi saat ini disorot
- Klik ganda item di tab Breakpoints atau Stack frames akan menampilkan assembly pada alamat tersebut
- Mendukung shortcut
NextidanStepi, yang biasanya default keCtrl+F5danCTRL+F6 - Menggunakan
^Fdi tab assembly akan menampilkan bilah pencarian - Fitur assembly ini masih baru dan terbuka untuk usulan perubahan maupun fitur
- Aktifkan dari
Alat visualisasi
-
Memory Visualizer
- Dapat memeriksa isi memori mentah
- Bisa dilihat dalam bentuk memori maupun disassembly
-
Array Visualizer
- Memvisualisasikan isi array
- Menyediakan mode tampilan Normal, Spline, dan Scatter
- Dua array dapat digunakan sebagai plot X-Y
- Contoh array
pointsmembentuk kontur X-Y
-
Struct Visualizer
- Menampilkan isi struct C/C++ atau class C++
- Contohnya menampilkan isi
*thisdari class C++ saat ini - Anggota struct dengan tipe dasar dapat diedit
- Ada juga Basic Struct Visualizer yang lebih ringan, tetapi tidak bisa mengikuti pointer maupun melakukan pengeditan
-
Image Visualizer
- Dapat digunakan saat melihat isi memori mentah yang berupa gambar
Dukungan dan kontak
- Bug atau permintaan fitur bisa dikirim ke
epasveer@att.netatau didaftarkan sebagai issue di GitHub - Pendaftaran issue: GitHub issues
1 komentar
Komentar Hacker News
Saya sempat membangun dan mencoba ini di Linux bersama Godot, dan secara umum lumayan, tetapi UI-nya terasa terlalu banyak widget dan tampak agak kurang dipoles
Mengubah font editor tidak berfungsi, dan saat mencoba melihat nilai dengan mengarahkan mouse ke atas variabel, tidak terjadi apa-apa atau kursor hanya berubah sebentar lalu GDB mengeluarkan error bahwa ia mencoba menggunakan ekspresi yang memiliki tipe/kata kunci
Klik ganda pada variabel menambahkan nilai saat ini dan cap waktu ke suatu panel, jadi kemampuan untuk membaca nilai/ekspresi dari UI memang ada, tetapi implementasi tooltip-nya tampaknya rusak
Dengan sedikit polesan ini mungkin bisa berguna, tetapi frontend yang paling tidak saya benci dari yang pernah saya coba sejauh ini adalah Gede. UI-nya sederhana dan intuitif, dan walau fiturnya tidak banyak, fitur yang ditampilkan cenderung bekerja dengan baik tanpa bug: https://gede.dexar.se/
Untuk menyimpan pengaturan secara permanen, Anda harus memilih “Save Configuration...”. Saya juga akan menguji tampilan mouse-over untuk nilai variabel, dan akan bagus jika bug atau permintaan fitur dilaporkan sebagai issue di GitHub
Ternyata GDB juga punya text user interface (TUI) bawaan yang cukup mudah dipakai. Bahkan mendukung interaksi mouse: https://sourceware.org/gdb/current/onlinedocs/gdb.html/TUI.h...
.gdbinittui new-layout default regs 1 {-horizontal src 1 asm 1} 2 status 0 cmd 1tui layout defaulttui enableSetelah mencoba beberapa frontend GDB, saya menilai TUI adalah yang terbaik. Saat program mencetak output dan antarmuka jadi rusak, Anda hanya perlu tahu
Ctrl + Luntuk menggambar ulangDi
$XDG_CONFIG_HOME/gdb/gdbinitsaya hanya menaruh inilayout srcset confirm offset prompt \001\033[01;36m\002(gdb)\001\033[0m\002Dan saya menyimpan riwayat seperti ini
set history save onset history size 500000set history filename ~/.cache/gdb/historygdb-dashboard. Mirip TUI, tetapi Anda bisa memilih beragam informasi yang ingin ditampilkan, dan warna membuat output jauh lebih mudah dibacaDashboard juga bisa ditampilkan di terminal lain atau dibagi ke beberapa terminal, jadi Anda bisa membuat tata letak jendela yang lebih baik. Dulu saya pernah menulis skrip dengan tmux untuk otomatis membuat tata letak terminal dan menghubungkannya ke GDB; butuh usaha lumayan, tetapi hasilnya tata letaknya cukup bagus
Ctrl + Lwajib diketahui untuk antarmuka berbasis TUI, termasuk saat layar Vim rusak. Setelah tahu ini, banyak “crash” misterius akhirnya terpecahkanJika Anda terhubung dari Windows ke Linux atau memakai WSL, Anda juga bisa melakukan remote debugging proses Linux dengan WinDBG/VisualStudio
Ini adalah UI Qt untuk GDB
Sepengetahuan saya, ada juga UI berbasis web untuk GDB bernama gdbgui: https://www.gdbgui.com/
Selalu bagus jika ada lebih banyak pergerakan di ranah alat debugging
Masih cukup banyak fitur yang belum ada dan mungkin penting untuk beberapa penggunaan. Itu karena cara pakai saya terutama untuk debugging tingkat assembly, jadi saya tidak membutuhkan banyak fitur mewah
Dua tahun lalu juga ada diskusi berskala sedang: https://news.ycombinator.com/item?id=33044885
Jika Anda pengguna Emacs, GUD adalah integrasi GDB yang cukup bagus
Tidak ada alasan untuk terus mencoba editor baru bulan ini hanya karena menambahkan beberapa fitur yang terasa seperti mainan. Dengan menambahkan satu plugin ke Emacs, saya bisa mendapatkan fitur yang sama sambil tetap mempertahankan semua hal lain sesuai cara yang saya suka
Saya benar-benar mulai serius menekuni pemrograman pada masa Atom masih ada, dan cukup disayangkan ketika Atom menghilang lalu menjadi VS Code. VS Code bagus, tetapi tidak mengikuti filosofi yang sama seperti Atom
Sejak belajar Emacs sekitar 4 tahun lalu, belum pernah ada alat baru yang berhasil meyakinkan saya bahwa “ini teknologi lama jadi kamu harus pindah.” Agak melantur, tapi saya benar-benar bersyukur Emacs terus bertahan
M-x gdb, daripada integrasi dasar melalui GUD yaituM-x gud-gdbBaru-baru ini saya harus beralih ke GUD untuk menjalankan lldb, dan saya merindukan jendela khusus yang menampilkan breakpoint, thread, stack saat ini, dan sebagainya
Hal yang bagus dari GUD adalah antarmukanya tetap konsisten meskipun debugger-nya berbeda. Jadi saat berpindah dari debugging Python dengan pdb ke debugging C++ dengan lldb, tidak perlu mempelajari ulang pintasan keyboard
https://www.gnu.org/software/emacs/manual/html_node/emacs/GD...
https://www.gnu.org/software/emacs/manual/html_node/emacs/St...
Dipakai bersama debugpy, ini membuat saya tidak lagi menggunakan
M-x pdb, dan UI-nya juga sangat mirip denganM-x gdblsp-mode+dap-modejuga bekerja dengan baik, tetapi filelaunch.jsonperlu diutak-atik sendiri sampai tingkat tertentuBagus. Saat pertama melihatnya, saya langsung teringat pada DDD, yang dulu terasa seperti sihir. Saya terkejut DDD masih dipelihara
https://en.wikipedia.org/wiki/Data_Display_Debugger
https://www.gnu.org/software/ddd/
Dari percakapan selama bertahun-tahun, DDD secara paradoks adalah alat reverse-marketing yang hebat, yang pada akhirnya mendorong para developer masuk ke UI debugger bawaan IDE favorit mereka. DDD sendiri memang sangat kuat, tetapi bahkan prinsip “kegunaan lebih penting daripada estetika” pun ada batasnya
Setelah saya menulis artikel itu, para maintainer memperbaiki masalah-masalah yang saya tunjuk, jadi sekarang banyak solusi sementara tidak lagi diperlukan. 3.4.0 dan 3.4.1 adalah rilis yang cukup besar
Dulu sempat ada proyek untuk mem-porting-nya ke GTK3, tetapi sepertinya sudah hilang. Meski begitu, syukurlah proyek utamanya terus berjalan
Meski begitu, tampaknya ada seseorang yang memindahkannya ke GitHub, menghidupkannya kembali, dan mengerjakan sedikit perbaikan: https://github.com/antony-jr/insight
Saya menemukan DDD ketika mencari sesuatu yang mirip dbxtool yang dulu saya pakai di mesin Sun Microsystems. Orang-orang zaman sekarang cukup dimanjakan dengan hal-hal seperti debugging level source
Proyek GNU dan RMS tampaknya sering dijadikan bahan ejekan seperti meme, tetapi GDB adalah alat yang kuat. Saya sendiri hanya sedikit memakainya, tetapi tampaknya selama bertahun-tahun ia memberi pengaruh besar pada pekerjaan para developer
Lebih dari 10 tahun lalu, saat menulis C++ di Linux, saya menggunakan Qt Creator dengan debugger bawaannya. Itu adalah frontend GDB dan bekerja sangat baik; untuk C++ dan Qt saya tidak merasa perlu memakai yang lain