Jika programmer berpengalaman sebenarnya pernah menggunakan debugger, dan jika demikian dalam keadaan apa. Meskipun dalam jawaban untuk pertanyaan itu saya katakan "bulan" yang lalu saya mungkin berarti "tahun" - saya benar-benar tidak menggunakan debugger. Jadi pertanyaan spesifik saya yang dapat dijawab adalah dalam keadaan apa Anda akan, sebagai programmer berpengalaman, menggunakan debugger?
15
Jawaban:
Saya akan mengatakan bahwa tidak menggunakan debugger adalah tanda tidak berpengalaman. Melangkah melalui kode per baris adalah cara terbaik untuk melacak alur eksekusi.
sumber
Saya sering menggunakan debugger, karena saya bekerja pada sistem yang besar dan karenanya saya payah. http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html
Tidak peduli seberapa pendek dan sering membaca kode Anda, selalu ada kemungkinan bahwa ia akan memiliki bug. http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html
Untuk berbuat salah adalah manusia dan orang tidak pernah dapat membuktikan bahwa suatu program benar, jadi mengapa tidak menggunakan alat seperti debugger / pengujian otomatis untuk membantu diri kita sendiri dalam bisnis yang sulit ini?
Jika kodenya cukup pendek, maka tes sederhana akan dilakukan. Juga, jika pendek dan Anda tahu sifat bug, membaca kode bisa cukup. Namun, begitu basis kode besar, melibatkan beberapa bahasa yang dicampur bersama, ditambah 3 tingkatan, maka Anda harus memiliki cakupan pengujian yang baik pada banyak tingkatan plus debugger yang sangat baik - jika tidak, Anda akan menghabiskan banyak waktu.
Jadi, kapan saya tidak perlu debugger?
Saya bukan pembuat kode yang paling pintar, juga bukan yang paling berpengalaman, tapi tetap saja, terkadang saya tidak perlu menggunakan debugger. Saat itulah:
Kapan saya sangat mengandalkan debugger?
FileNotFoundException
.Perhatikan bahwa "debugger" dapat merujuk ke lebih dari satu alat. Saya menggunakan Visual Studio debugger, SQL debugger (kebanyakan untuk procs tersimpan) dan SQL profiler juga (untuk mencari tahu SP mana yang dipanggil). Apakah saya memerlukan alat kaliber ini saya sedang menulis skrip Python sysadmin-ish cepat? Tidak. Jika saya membuat alat kecil berbasis GUI sendiri? Tergantung. Jika. WinForms Net -. Mungkin tidak Jika WPF - ya.
Apa yang mendefinisikan programmer "nyata"? Yang cepat? berpengetahuan luas? Apakah pandai algoritma? Menulis dokumentasi yang bagus? Kapan tepatnya seseorang lulus ke gelar baru ini? Kapan seseorang melewati garis magis?
Saya akan mengatakan bahwa seorang programmer yang tidak mendapatkan tangannya kotor dalam upaya 100 + man-tahun yang ada belum memiliki kesempatan untuk direndahkan oleh kompleksitas dan keterbatasan sendiri (serta frustrasi dengan kualitas kode).
Saya pribadi mencoba menggunakan debugger terbaik yang tersedia untuk saya, dan saya cenderung sering menggunakannya. Jika tugas cukup sederhana dan tidak memerlukan debugger - Saya tidak menggunakannya. Tidak butuh waktu terlalu lama untuk menentukan apakah saya membutuhkannya atau tidak.
...
Sekarang, secara teori saya bisa membaca basis kode begitu lama, sehingga saya akan mendapatkannya. Namun, pendekatan langsung bekerja paling baik, ditambah lagi saya sering ingin menulis ulang kode bodoh yang saya lihat. Sayangnya butuh 10+ tahun untuk membersihkan basis kode yang saya gunakan. Jadi, menggunakan debugger adalah langkah pertama yang jelas. Hanya ketika saya mengetahui salah satu dari 5 juta baris kode mana yang bekerja, saya akan memindai file naik dan turun untuk mencoba mencari tahu apa yang dilakukan kelas itu.
sumber
"Aku tidak suka para penentang. Tidak pernah, mungkin tidak akan pernah." - Linus Torvalds
Di sisi lain, dia tidak memiliki akun Stack Overflow, jadi saya tidak yakin apakah Anda tertarik dengan pendapatnya :)
sumber
Edit:
Saya beruntung / tidak beruntung karena tidak tahu cara menggunakan debugger dalam perjalanan pemrograman saya. Jadi di masa lalu saya dipaksa untuk debug tanpa debugger. Namun setelah belajar menggunakan debugger -> Saya menjadi 100x lebih produktif dalam menemukan bug.
sumber
Untuk memberikan perspektif yang sedikit berbeda dari jawaban saat ini; Sebagai seorang insinyur perangkat lunak tertanam yang bekerja pada sistem yang sering memiliki komponen real-time, saya jarang menggunakan debugger.
Kadang-kadang debugger bisa menjadi alat yang luar biasa dan setiap kali saya bisa membangun dan menjalankan kode pada desktop maka saya akan selalu menggunakan debugger.
Pada chip, dengan batasan waktu nyata, maka ada beban berat yang terkait dengan mencoba menggunakan debugger. Segera setelah Anda menjeda eksekusi, Anda kemungkinan besar akan kesal, kemungkinan fatal, waktu dari sisa sistem. Umumnya pada chip, printf dalam kode non-kritis dan IO bertaruh dalam kode waktu-kritis adalah alat terbaik dan sebenarnya paling sederhana. Ini tidak sebagus debugger, tetapi jauh lebih murah untuk bekerja dengan sistem nyata.
sumber
Saya pikir programmer yang berpengalaman hampir secara eksklusif menggunakan debugger, ketika mereka dibutuhkan. Apa cara yang lebih baik untuk melacak bug daripada benar-benar mengikuti eksekusi kode ...
Apakah Anda di bawah asumsi bahwa Skeets dunia tidak melakukan kesalahan atau hanya mengetahui segalanya? Semua kecuali program yang paling sepele berperilaku dengan cara yang tidak terduga dalam beberapa keadaan. Sudah pasti bahwa masalah harus diselidiki. Jadi pilihannya adalah menggunakan pernyataan cetak, di satu sisi spektrum, atau melihat memeriksa apa yang terjadi, post mortem, di sisi lain, atau melihat tepat di tengah saat kode dijalankan dan mencari tahu apa yang terjadi.
Mungkin cara berpikir yang lebih baik adalah bahwa programmer yang berpengalaman tahu kapan harus menggunakan debugger. Dalam kode dengan sedikit ketergantungan melihat jejak stack mungkin cukup untuk mencari tahu apa yang salah. Tetapi ada skenario rumit di mana kode Anda bekerja dengan kode lain, dan Anda memerlukan debugger untuk melihat hal-hal yang tidak Anda tulis.
sumber
Saya tidak, dan saya sudah pemrograman selama lebih dari 10 tahun. Saya dulu, ketika saya diprogram dalam c / c ++. Sekarang saya memprogram di java. Yang benar adalah bahwa jika Anda melakukan logging dengan benar, Anda akan berakhir dengan jejak stack yang cukup untuk sebagian besar pengembang yang terampil. Juga jika Anda menulis unit test (baik), dan tes fungsional, yang menghilangkan seluruh kelas bug.
sumber
cgitb.enable(format='text')
tetap cinta .Siapa peduli? Yang ingin saya ketahui adalah apakah menggunakan debugger akan mencegah saya menjadi programmer yang lebih baik dalam jangka panjang? Mungkin debugger memiliki kualitas yang lebih rendah ketika banyak pengembang berpengalaman memulai sehingga mereka menjadi penghalang. Apakah itu penopang yang mencegah pemahaman yang lebih dalam?
Beberapa programmer, mungkin lebih baik daripada kita semua, menemukan kebutuhan untuk debugger dan membangun satu (Tidak tahu siapa yang menciptakan yang pertama.). Saya yakin mereka lebih produktif karenanya. Saya ragu motivasinya adalah untuk memungkinkan manusia yang lebih rendah untuk menulis kode.
sumber
Jarang.
Metode Anda harus kecil / cukup sederhana untuk dikompilasi dan dijalankan oleh pikiran Anda, unit test harus mencakup fungsionalitas. Jika Anda menemukan bug, tulis tes. Jalankan, perbaiki.
Saya hanya cenderung menggunakan debugger ketika ive mendapat perilaku tak terduga dari kode yang tidak bisa diuji, seperti kerangka ASP.NET.
sumber
Di Smalltalk, saya mengembangkan hampir seluruhnya di debugger:
sumber
Saya menggunakan debugger ketika saya perlu. Itu tidak setiap hari, tetapi itu terjadi sesekali. Terkadang lebih baik melangkah melalui kode untuk melihat apa yang sebenarnya terjadi.
Saya harus mengakui bahwa saya semakin jarang menggunakan debugger. Saya telah berkembang di Delphi selama lebih dari 10 tahun. Saya juga menulis prosedur tersimpan dalam PL / SQL. Sejak beberapa bulan, saya juga seorang pengembang PHP.
Saya terutama menggunakan debugger dalam salah satu dari kasus ini jika saya menemukan sepotong kode tidak jelas yang ditulis tahun lalu dan saya perlu memodifikasinya. Terkadang membantu untuk mengetahui cara kerja suatu program jika sulit untuk membaca kodenya. Dalam PHP itu hampir tidak pernah diperlukan, tetapi dalam Delphi, yang berbasis peristiwa, kadang-kadang membantu ketika Anda mendapatkan kerangka kerja yang kompleks.
Tapi seperti yang Anda katakan, menggunakan debugger adalah pengecualian. Sebagian besar masalah diselesaikan dengan hanya membaca kode dan memperbaiki kesalahan yang Anda (atau orang lain) buat.
Tapi itu berlaku untuk melangkah melalui kode. Saya cukup sering menggunakan stack panggilan ketika pengecualian terjadi, dan saya kadang-kadang meletakkan breakpoint di suatu tempat untuk memeriksa variabel. Tetapi hampir selalu dalam sepotong kode yang membutuhkan refactoring menyeluruh pula.
sumber
Saya kadang-kadang kode tanpa debugger, tetapi hanya ketika dipaksa di bawah todongan senjata, yaitu. warisan tertanam gunge pada 8051 atau Z80.
IMHO, Anda memerlukan debugger dan masuk pada pekerjaan kompleks apa pun. Sekali bukan merupakan pengganti yang lain. Sistem pencatatan tidak dapat membantu jika aplikasi memasukkan driver, misalnya, di mana satu-satunya hal yang dapat dilakukan kode adalah berinteraksi dengan perangkat keras dan mengatur semafor.
Seorang debugger tidak dapat membantu dengan kesalahan sistem di mana aplikasi bekerja dengan baik sesuai dengan cara Anda menulisnya, tetapi sistem masih tidak berfungsi karena beberapa kesalahan protokol komunikasi terputus-putus.
Jadi, saya perlu debugger untuk menghapus bugup yang mencolok, bug dan hardware. Saya perlu pencatatan yang baik untuk menangkap bug integrasi sistem intermiten.
Saya harus memiliki keduanya - Saya butuh semua bantuan yang bisa saya dapatkan!
sumber
Saya hanya menggunakan debugger ketika langkah-langkah ini gagal:
Langkah-langkah ini menangani 95% dari semua kasus. Itu berarti saya jarang menggunakan debugger, dan ketika saya melakukannya, itu cenderung memberi saya terlalu banyak informasi dan saya terjebak dalam detail yang tidak terkait. Ini terutama benar jika bekerja pada sistem waktu-nyata multi-threaded.
Jadi, pernyataan logging yang ditempatkan dengan bijaksana berjalan jauh.
sumber
Mungkinkah pemrogram yang sangat berpengalaman itu sama dengan pemrogram yang sangat tua, dan mereka belajar memprogram, dan membentuk kebiasaan mereka, dulu ketika debugger tidak selalu tersedia, dan kadang-kadang tidak terlalu baik?
Jika Anda benar-benar hebat dalam debugging printf (dan kembali pada tahun delapan puluhan, kami tidak punya banyak pilihan selain menjadi sangat baik dalam hal itu), mungkin debugger tidak menambahkan sebanyak itu.
sumber
Ini pertanyaan pilihan pribadi.
Jujur saya pikir debuggers berguna dalam situasi tertentu di mana itu membantu banyak mengetahui apa yang terjadi pada ram Anda pada setiap langkah tertentu dari eksekusi program Anda.
Utilitas utama dari debugger adalah untuk menghentikan suatu program tanpa program yang dirancang untuk menghentikan dirinya sendiri: fitur ini cukup penting.
Terlepas dari 2 fitur itu, saya tidak berpikir debugger benar-benar diperlukan; program kompleks apa pun yang Anda buat harus memiliki semacam mode "verbose", yaitu menceritakan semua yang dilakukannya dengan printf atau std :: cout, pilihan apa yang dibuatnya, dan banyak parameter lainnya.
Bayangkan saja Anda membuat sebuah program, dan pengguna memiliki masalah dalam menggunakannya: bagaimana cara mengetahui apakah ia menggunakan cara itu dirancang untuk digunakan, atau jika hal yang dikeluhkannya mungkin berupa bug?
Debugger seperti setir elektrik untuk mobil Anda: lebih nyaman memilikinya, tetapi tidak akan membuat drive Anda lebih baik.
Progamming adalah tentang desain dan logika, cara alat dapat membantu Anda dalam melacak hal-hal tidak membuat Anda menjadi programmer yang lebih baik.
Plus debugger berguna untuk bahasa yang dikompilasi, apalagi untuk yang intepret.
sumber