3 poin oleh GN⁺ 2024-11-16 | 1 komentar | Bagikan ke WhatsApp
  • 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
    • 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:
  • Versi beta Flatpak:
    • Seer release page
    • Unduh dan pasang seer.flatpak
    • Untuk menjalankan GDB dari GDB Launcher, diperlukan flatpak-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
    • ^F dapat digunakan untuk mencari teks di dalam file
    • Nama variabel bisa diklik ganda untuk ditambahkan ke Logger
      • Klik ganda CTRL menambahkan * di depan variabel
      • Klik ganda SHIFT menambahkan & di depan variabel
      • Klik ganda CTRL+SHIFT menambahkan *& di depan variabel
    • 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 dprintf milik 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 Nexti dan Stepi, yang biasanya default ke Ctrl+F5 dan CTRL+F6
    • Menggunakan ^F di tab assembly akan menampilkan bilah pencarian
    • Fitur assembly ini masih baru dan terbuka untuk usulan perubahan maupun fitur

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 points membentuk kontur X-Y
  • Struct Visualizer

    • Menampilkan isi struct C/C++ atau class C++
    • Contohnya menampilkan isi *this dari 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.net atau didaftarkan sebagai issue di GitHub
  • Pendaftaran issue: GitHub issues

1 komentar

 
GN⁺ 2024-11-16
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/

    • Saya pembuat Seergdb. Akan bagus kalau Anda bisa menjelaskan lebih lanjut soal pengaturan font editor yang tidak berfungsi; dalam pengujian kami itu tampaknya berjalan
      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
    • Saya tidak ingin harus menghadapi bug pada alat debugging saat sedang mencari bug di kode saya, jadi saya catat untuk mencoba Gede lain kali saat perlu debugging
  • 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...

    • Secara pribadi saya lebih suka command line daripada TUI, tetapi Anda bisa menaruh ini di .gdbinit
      tui new-layout default regs 1 {-horizontal src 1 asm 1} 2 status 0 cmd 1
      tui layout default
      tui enable
    • Kombinasi Neovim + nvim-dap + nvim-dap-ui + gdb menurut saya jauh lebih baik
    • Sayangnya ini hanya berfungsi jika GDB dibangun dengan dukungan TUI
  • Setelah mencoba beberapa frontend GDB, saya menilai TUI adalah yang terbaik. Saat program mencetak output dan antarmuka jadi rusak, Anda hanya perlu tahu Ctrl + L untuk menggambar ulang
    Di $XDG_CONFIG_HOME/gdb/gdbinit saya hanya menaruh ini
    layout src
    set confirm off

    • Saya suka memakai prompt berwarna seperti ini
      set prompt \001\033[01;36m\002(gdb)\001\033[0m\002
      Dan saya menyimpan riwayat seperti ini
      set history save on
      set history size 500000
      set history filename ~/.cache/gdb/history
    • Saya sering memakai dan merekomendasikan gdb-dashboard. Mirip TUI, tetapi Anda bisa memilih beragam informasi yang ingin ditampilkan, dan warna membuat output jauh lebih mudah dibaca
      Dashboard 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 + L wajib diketahui untuk antarmuka berbasis TUI, termasuk saat layar Vim rusak. Setelah tahu ini, banyak “crash” misterius akhirnya terpecahkan
    • gef mendukung tmux, sehingga output program masuk ke panel tmux lain
    • Frontend gud-gdb di dalam Emacs cukup nyaman dan mudah dipakai
  • Jika Anda terhubung dari Windows ke Linux atau memakai WSL, Anda juga bisa melakukan remote debugging proses Linux dengan WinDBG/VisualStudio

    • Bukankah itu cukup jika gdbserver berjalan di sisi remote?
  • 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

    • Saya suka bahwa di Qt Creator, GDB bekerja tanpa konfigurasi yang rumit. Tinggal pasang beberapa breakpoint dan tekan run, lalu IDE menangani sisanya
    • Menambahkan satu lagi ke daftar GUI GDB, ada juga yang saya buat: https://github.com/dzaima/grr
      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
    • Ada juga DDD. Itu frontend Motif
    • VS Code juga punya frontend GDB yang cukup bagus, terutama untuk debugging mikrokontroler embedded
    • Karena debugger berbasis web tadi disebut, saya juga baru-baru ini membuat proyek serupa yang berfokus pada debugging assembly x86-64: https://github.com/robalb/x86-64-playground
  • 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

    • Sejak LSP muncul, Emacs terasa lebih baik daripada semua yang lain. Tidak ada alasan untuk pindah. Terutama setelah jadi lebih cepat berkat kompilasi native
      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
    • Saya lebih suka GDB Graphical Interface di Emacs, yaitu M-x gdb, daripada integrasi dasar melalui GUD yaitu M-x gud-gdb
      Baru-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...
    • dape(https://github.com/svaante/dape#) adalah pilihan yang bagus untuk bahasa yang memiliki debugger dengan implementasi Debug Adapter Protocol
      Dipakai bersama debugpy, ini membuat saya tidak lagi menggunakan M-x pdb, dan UI-nya juga sangat mirip dengan M-x gdb
    • lsp-mode + dap-mode juga bekerja dengan baik, tetapi file launch.json perlu diutak-atik sendiri sampai tingkat tertentu
  • Bagus. 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/

    • Saya belajar DDD di kampus 20 tahun lalu, dan bahkan saat itu pun rasanya sudah kaku. Sekarang saya melihatnya dengan jauh lebih toleran, tetapi Motif masih tetap mengganggu mata
      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
    • Tentu saja DDD masih dipelihara. Saya menulis tentang fiturnya di sini: https://begriffs.com/posts/2022-07-17-debugging-gdb-ddd.html
      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
    • Saya suka karena DDD punya berbagai visualisasi grafis bawaan. Secara khusus, saya selalu menganggap fitur visualisasi struktur data itu keren
      Dulu sempat ada proyek untuk mem-porting-nya ke GTK3, tetapi sepertinya sudah hilang. Meski begitu, syukurlah proyek utamanya terus berjalan
    • Ini mengingatkan saya pada frontend GDB favorit saya, Insight, yang dulu bekerja sangat baik di Windows pada era cygwin. Sayangnya ini jelas sudah tidak dipelihara lagi: https://sourceware.org/insight/screenshots.php
      Meski begitu, tampaknya ada seseorang yang memindahkannya ke GitHub, menghidupkannya kembali, dan mengerjakan sedikit perbaikan: https://github.com/antony-jr/insight
    • DDD itu hebat. Saya masih memakainya, tapi saya memang orang yang seperti fosil
      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

    • Murni penasaran, sebenarnya GNU diejek karena apa?
  • 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