2 poin oleh GN⁺ 2023-11-12 | 1 komentar | Bagikan ke WhatsApp

Pengenalan debugger Spray

  • Spray adalah debugger yang sederhana dan mudah dipahami untuk kode C.
  • Menyediakan kemampuan untuk mengontrol eksekusi program yang sedang berjalan serta memeriksa dan memodifikasi statusnya.
  • Pengembangan dimulai untuk mengeksplorasi rasa ingin tahu tentang cara kerja internal debugger dan bagaimana membuat debugging lebih mudah diakses.

Fitur utama

  • Menetapkan breakpoint pada fungsi, baris dalam file, dan alamat.
  • Menampilkan dan mengatur nilai variabel, alamat memori, dan register.
  • Highlighting sintaks C, backtrace, eksekusi langkah demi langkah.
  • Fitur filter untuk menentukan format output perintah.

Roadmap pengembangan

  • Menampilkan dan memodifikasi struct yang kompleks.
  • Highlighting sintaks untuk struct yang kompleks.
  • Backtrace berbasis DWARF alih-alih frame pointer.
  • Menangani fungsi inline, pemuatan library eksternal, dan menangkap sinyal yang dikirim ke program yang sedang di-debug.

Cara instalasi

  • Sebagian frontend Spray ditulis dengan Scheme dan dikompilasi ke C melalui CHICKEN Scheme.
  • Perlu menginstal CHICKEN, dan karena bergantung pada libdwarf, itu harus diinstal terlebih dahulu.
  • Clone repositori dan instal Spray dengan perintah make.
  • Tambahkan ke $PATH agar bisa digunakan seperti perintah biasa.

Cara menggunakan Spray

  • Informasi debug harus diaktifkan pada biner yang akan di-debug, dan optimisasi harus dinonaktifkan.
  • Program harus dikompilasi menggunakan Clang.
  • Berikan nama biner yang akan di-debug sebagai argumen pertama, lalu argumen untuk program yang akan di-debug setelahnya.

Perintah

Membaca dan menulis nilai

  • Menampilkan atau mengatur nilai variabel, register, dan alamat.
  • Nama register menggunakan prefiks % sesuai sintaks assembly AT&T.
  • Nilai dapat ditentukan dalam desimal atau heksadesimal.

Breakpoint

  • Menetapkan dan menghapus breakpoint pada fungsi, baris dalam file, dan alamat.
  • Lanjutkan eksekusi hingga breakpoint berikutnya dengan perintah continue.

Eksekusi langkah demi langkah

  • Pindah ke baris berikutnya, masuk ke dalam fungsi, atau keluar dari fungsi saat ini.
  • Pindah ke instruksi berikutnya, dan tampilkan backtrace dari lokasi saat ini.

Filter

  • Dapat menggunakan filter untuk mengubah format output.
  • Tempelkan filter setelah perintah print dan set untuk mengubah format output.

Cara berkontribusi

  • Semua kontribusi diterima, dan sebelum pull request jalankan test suite lokal untuk memastikan tidak merusak fitur.
  • Kegagalan tes akibat kesalahan off-by-one pada nilai tertentu dapat diabaikan.

Referensi

  • Seri blog Sy Brand "Writing a Linux Debugger", standar DWARF 5, dokumentasi libdwarf, dan artikel Eli Bendersky "How debuggers work".

Pendapat GN⁺

Hal terpenting dari tulisan ini adalah bahwa Spray adalah debugger yang ramah pengguna untuk kode C, dengan fokus membuat debugging lebih mudah diakses. Daya tariknya terletak pada kemampuannya membantu tugas debugging yang kompleks menjadi lebih mudah dengan menyediakan struktur dan perintah yang gampang dipahami bahkan oleh software engineer pemula. Selain itu, roadmap pengembangan dan cara berkontribusinya disajikan dengan jelas, sehingga memberikan peluang menarik bagi developer yang ingin berpartisipasi dalam proyek open source.

1 komentar

 
GN⁺ 2023-11-12
Komentar Hacker News
  • Kode dari programmer remaja ini sangat rapi, konsisten, dan termodularisasi dengan baik. Proyek seperti ini memerlukan pengetahuan yang tidak lazim tentang format biner dan API kernel. Banyak programmer "mahir" pun mungkin akan kesulitan membangun sesuatu seperti ini bahkan pada tingkat konseptual.

    • Penasaran bagaimana seorang anak 17 tahun memperoleh pengetahuan seperti ini. Apakah melalui buku, rekan, klub pemrograman, orang tua programmer, atau yang lain?
  • Menarik membaca kode dari programmer muda. Meski pengalamannya masih terbatas, terlihat mereka merancang dengan tingkat pengetahuan yang cukup tinggi. Penulis tampaknya belajar dengan cepat, dan hasil kerja selama 6 bulan ini luar biasa.

  • Kagum dengan tingkat dedikasi seperti ini. Saya merekomendasikan untuk mengikuti program seperti Google Summer of Code, KDE Season of Code, Linux Foundation LFX, dan X.org EVoC. Ada banyak masalah menarik di sana. Andai saya tahu program-program seperti ini saat masih menjadi pelajar. Sekarang saya punya pekerjaan penuh waktu dan tidak punya waktu untuk berkontribusi ke open source.

  • Saat pertama kali melihat proyek ini, tampilannya sangat terorganisasi. Patut dipuji.

    • Penasaran sudah berapa lama dia belajar pemrograman, dan bahasa apa yang pertama kali dipakai. Ada banyak developer yang usianya puluhan tahun lebih tua daripada kalian tetapi bahkan tidak tahu cara menulis Makefile.
    • Penasaran apakah penggunaan emoji inline di dalam source code itu tren terbaru, atau untuk mengingatkan agar lebih memperhatikan input non-ASCII.
  • Selamat atas proyek ini dan semoga sukses. Compiler adalah salah satu topik pertama yang membuat saya tertarik pada komputasi.

    • Ada sebuah buku yang saya baca berulang kali, dan sekarang tersedia gratis. Buku itu tentang bagian compiler, tetapi mungkin juga menarik untuk debugging.
  • Ini menunjukkan bahwa anak 17 tahun pun masih tahu apa itu CD. Ikon simpan berbentuk disket mungkin juga belum benar-benar ketinggalan zaman.

  • Pengetahuan dan kedewasaan yang ditunjukkan di usia 17 tahun sangat mengesankan. Topik yang diteliti dan diterapkan biasanya diharapkan pada tingkat universitas, dan proyek ini layak masuk ke mata kuliah tingkat pascasarjana. Semoga kariernya sukses.

  • Saya ingat saat muda dulu menulis library grafis 2D menggunakan Turbo Pascal. Itu berakhir hanya sebagai kesenangan pribadi karena saat itu saya belum mengenal internet, tetapi saya rasa dia sudah melakukan hal yang baik dengan membuatnya bisa dilihat orang lain. Kodenya rapi, komentarnya baik, dan README-nya jelas.

    • Mengeluarkan hasil kerja ke publik memang menakutkan, tetapi apa yang dikatakan orang sering kali juga mencerminkan diri mereka sendiri, jadi tidak perlu terlalu serius menanggapinya.
  • Membuat tutorial "menulis debugger" bersama proyek ini mungkin terasa membosankan, tetapi akan sangat berguna.

  • Saya penasaran mengapa ada spasi antara nama fungsi dan argumennya. Sebagai orang yang sudah 18 tahun membaca kode C, itu terasa agak asing.

    • Saya lebih menyukai gaya BSD, dan jika Anda menggunakan sistem BSD, saya sarankan melihat 'man style' untuk mencoba gaya tersebut.