Setiap kali saya mencari IDE (saat ini saya mengutak-atik Go), saya menemukan utas penuh dengan orang merekomendasikan Vi, Emacs, Notepad ++ dll.
Saya tidak pernah melakukan pengembangan di luar IDE; Saya kira saya sudah dimanjakan. Bagaimana Anda melakukan debug tanpa IDE? Apakah Anda terbatas hanya dengan login?
Jawaban:
Dengan menggunakan debugger. Sebagian besar, ini juga yang dilakukan oleh IDE di balik layar - itu hanya membungkus pengalaman dalam GUI.
Di Unix, salah satu debuggers yang paling umum digunakan adalah GNU
gdb
, yang telah menggantikan sebagian besar debuggers Unix sebelumnya sepertidbx
.Untuk mendapatkan gambaran tentang apa yang tampak / terasa seperti debugging dari baris perintah, Anda dapat melihat manual gdb .
Seperti di daerah lain, menggunakan debugger dari baris perintah membutuhkan mempelajari sintaks dan serangkaian perintah, tetapi membawa banyak fleksibilitas dan skripabilitas. Di sisi lain, jika Anda sudah merasa nyaman bekerja di editor seperti vim atau emacs, Anda mungkin menemukan bahwa editor favorit Anda memiliki plug in untuk debugger favorit Anda.
sumber
pdb
sebenarnya lebih baik daripada debugger IDE yang saya temukan.ipdb
lebih baik dari itu;)Saya menggunakan debugger selama beberapa tahun ketika saya sedang menulis driver grafis. Saya memiliki komputer kedua yang menjalankan debugger terhadap yang pertama (karena layar di komputer utama tidak akan berfungsi ketika driver grafis rusak). Sangat penting untuk dapat menghentikan kode dan melangkah ke titik di mana saya menggantung perangkat keras sehingga saya tahu apa yang terjadi.
Untuk masalah perangkat lunak murni, saya menemukan bahwa berpikir tentang masalah dan menguji sistem untuk mempelajari lebih lanjut tentang masalah jauh lebih berguna daripada melangkah melalui kode baris demi baris. Dengan pernyataan cetak, saya memiliki daftar semua yang terjadi pada baris perintah atau file log yang dapat saya lihat dan merekonstruksi apa yang terjadi, bergerak maju dan mundur dengan lebih mudah daripada yang pernah saya lakukan dengan debugger.
Bug yang paling sulit biasanya diselesaikan dengan memahami masalah dari komputer. Terkadang dengan selembar kertas atau papan tulis, dan terkadang jawabannya muncul dengan sendirinya saat saya melakukan sesuatu yang lain. Bug paling sulit diselesaikan dengan melihat dengan hati-hati pada kode seperti bermain Where's Waldo. Semua yang lain tampak paling mudah dengan pernyataan cetak, atau pernyataan logging.
Orang yang berbeda memiliki gaya yang berbeda, dan gaya yang berbeda lebih baik untuk tugas yang berbeda pula. Pernyataan cetak tidak harus merupakan langkah mundur dari debugger. Tergantung pada apa yang Anda lakukan, mereka bahkan bisa lebih baik. Terutama dalam bahasa yang tidak memiliki debugger asli (apakah Go?).
sumber
going backwards
. Saya sering memiliki pengalaman: "Hei - tunggu sebentar, ini bukan nilai yang tepat! Bagaimana ini menjadi ini ?", Dan harus bolak-balik dalam output sambil membaca kode. Debugger buruk di belakang.Beberapa orang menggunakan gdb di baris perintah, atau sebuah plugin . Ada juga ujung depan GUI mandiri ke gdb, seperti DDD . Bergantung pada bahasa Anda, ada GUI debugger mandiri khusus-bahasa, seperti Winpdb untuk python, atau jswat untuk java. Karena proyek-proyek ini hanya fokus pada debugging, mereka seringkali lebih unggul daripada debugger terintegrasi.
Rahasia kecil kotor lainnya tentang IDE adalah semuanya sepadan dengan garamnya memungkinkan Anda menentukan editor khusus, sehingga Anda dapat menggunakan bagian-bagian IDE untuk tugas-tugas tertentu, tetapi menggunakan editor yang layak untuk mengedit. Tidak jarang hanya menjalankan IDE untuk menggunakan debugger-nya, terutama jika itu yang digunakan oleh semua kolega Anda.
sumber
Beberapa bahasa menawarkan REPL - yaitu, Anda dapat menulis dan mengeksekusi kode per baris saat Anda menulisnya, yang dapat menjadi langkah pertama dalam memverifikasi sepotong kode. Banyak dari ini juga menawarkan fasilitas debugging. GHC untuk Haskell hadir dengan GHCi yang dapat digunakan untuk debug program secara interaktif di baris perintah, mirip dengan bagaimana IDE akan melakukannya.
sumber
Saya tidak mengerti mengapa ada keengganan untuk debugging dengan menggunakan pernyataan printf. Ada waktu ketika terlalu lama untuk mengkompilasi ulang dan menautkan suatu program, tetapi hari ini hanya butuh beberapa detik. Saya merasa sangat mudah untuk debug menggunakan jenis output cout, printf, qDebug (), dll. Pernyataan Printf memberi Anda riwayat menjalankan semua yang dilakukan program, yang dapat Anda analisis setelah fakta, sedangkan menjalankan debugger menyebabkan Anda harus mengingat secara manual aliran program saat dijalankan. Dengan printf, Anda dapat mengonversi nilai variabel ke unit tertentu, menampilkannya dalam hex, desimal, apa pun. Pernyataan printf dapat mencantumkan nama-nama rutin dan variabel, dan nomor baris juga. Anda bisa mendaftar hanya elemen array tertentu tergantung pada variabel lain. Anda dapat mengikuti tipuan. Anda dapat mengontrol output dengan sangat mudah, memasukkan penghitung, hanya mencetak waktu-waktu tertentu melalui loop, menambah dan menghapus pernyataan cetak saat Anda men-debug, memiliki berbagai tingkat hasil debug, menulis ke file, dll. Ini jauh lebih mudah untuk melihat sejarah program Anda yang ditulis ke file daripada ke cobalah untuk mengingat semua tempat yang Anda lewati secara manual, dan mungkin harus menuliskan konten variabel saat mereka berubah sepanjang waktu, untuk menemukan apa yang telah dilakukan program. Dan akhirnya, dengan pernyataan printf Anda dapat membiarkannya secara permanen, untuk dihidupkan dan dimatikan, untuk debugging berikutnya. Jauh lebih mudah untuk melihat riwayat program Anda yang ditulis ke file daripada mencoba mengingat semua tempat yang Anda lewati secara manual, dan mungkin harus menuliskan isi variabel ketika mereka berubah melalui waktu, untuk menemukan program apa telah selesai. Dan akhirnya, dengan pernyataan printf Anda dapat membiarkannya secara permanen, untuk dihidupkan dan dimatikan, untuk debugging berikutnya. Jauh lebih mudah untuk melihat riwayat program Anda yang ditulis ke file daripada mencoba mengingat semua tempat yang Anda lewati secara manual, dan mungkin harus menuliskan isi variabel ketika mereka berubah melalui waktu, untuk menemukan program apa telah selesai. Dan akhirnya, dengan pernyataan printf Anda dapat membiarkannya secara permanen, untuk dihidupkan dan dimatikan, untuk debugging berikutnya.
sumber
jimwise menjawab pertanyaan dengan cukup baik, tetapi saya pikir saya harus menambahkan itu, jika Anda memilih untuk bekerja tanpa IDE penuh, debugger baris perintah yang disediakan Microsoft untuk Windows disebut CDB . CDB hadir dengan beberapa alat lain, termasuk WinDBG yang setara dengan GUI, saat Anda mengunduh Windows SDK.
sumber
Saya biasanya tidak menggunakan debugger, mungkin sekali setiap beberapa minggu tetapi itu bukan hal pertama yang saya tuju.
Alat yang paling penting dalam pekerjaan saya sangat di mana-mana sehingga saya hampir lupa menyebutkannya - tumpukan jejak. Lebih dari 90% masalah yang saya temui dapat diselesaikan dengan memeriksa jejak tumpukan. Alat ini tidak selalu sangat membantu tergantung pada bahasa Anda, tetapi ketika mereka diimplementasikan dengan baik oleh bahasa mereka dapat menghemat waktu Anda yang luar biasa.
Saya kira cara kedua yang paling umum saya mendeteksi masalah sederhana adalah mungkin itu kode yang baru saja saya ubah. Saya menjalankan tes unit cukup sering sehingga saya biasanya tahu apa yang baru saja saya langgar.
Untuk pengembangan dan debugging yang lebih kompleks, saya mungkin menambahkan beberapa debug atau melacak pernyataan log level. Saya menganggap masalah pengembangan sebagai panduan yang baik untuk membantu saya menempatkan informasi penelusuran / penelusuran log produksi, yang mengarahkan saya ke:
Anda tidak selalu memiliki alat debugger. Dalam produksi mungkin tidak mungkin menjalankan debugger (Heck, mungkin tidak mungkin untuk mengakses mesin produksi kecuali untuk log tergantung pada seberapa aman perusahaan Anda). Ada juga bahasa di mana menghubungkan debugger hanya memakan waktu terlalu lama atau mungkin tidak tersedia debugger yang bagus.
Jika Anda telah melakukan pengkodean menggunakan logika dan debug / penelusuran jejak tingkat itu bisa saja menjadi kasus memeriksa laporan log yang sangat baik Anda (Mungkin meningkatkan tingkat log) untuk mencari tahu masalah tanpa bahkan mengakses perangkat keras.
Meskipun saya pikir debuggers adalah alat yang ampuh, jangan biarkan mereka menjadi satu-satunya alat di kotak peralatan Anda!
sumber
Tidak ada alasan mengapa Anda tidak dapat menggunakan debugger dalam IDE bersama editor teks mandiri. Saya biasa menggunakan! Zap untuk mengedit, JBuilder untuk debug pada komputer lain, dan fileserver di ruang bawah tanah. Biasanya debugger adalah program mandiri tanpa menyeret IDE, dan itu juga berfungsi.
Perlu diperhatikan bahwa pengujian komprehensif menggantikan debugging. Sebaiknya pertimbangkan bug yang dilaporkan sebagai bug dalam pengujian Anda dan bukan dalam kode Anda.
Ada juga
printf
. Ini dapat berguna untuk membuat sejumlah besar "logging" dan mencari melalui itu, daripada berhenti untuk setiap baris. Saya menemukan sangat berguna jika Anda dapat memodifikasi kelas perpustakaan yang Anda tidak dapat memodifikasi dalam produksi, misalnya menggunakan-Xbootclasspath/p:
untuk meretas kelas perpustakaan Java.sumber
Setuju bahwa masalah terbaik dapat diselesaikan dari komputer dengan pena dan kertas atau hanya memikirkan masalah itu. Ini lebih membantu daripada menggunakan live debugger. Ini sering memperbaiki proses berpikir Anda.
Anda dapat menggunakan pudb yang merupakan konsol berbasis antarmuka pengguna yang sederhana. Anda dapat memilih debugger yang disukai seperti pdb atau ipdb jika Anda ingin memasukkan REPL dan memeriksa lebih detail.
Periksa juga Wiki PythonDebuggingTools untuk koleksi alat yang lebih komprehensif yang tersedia.
sumber