Mengapa reverse debugging jarang digunakan? [Tutup]

57

gdb mengimplementasikan dukungan untuk debugging terbalik pada 2009 (dengan gdb 7.0). Saya tidak pernah mendengarnya sampai 2012. Sekarang saya merasa sangat berguna untuk beberapa jenis masalah debugging. Saya berharap bahwa saya pernah mendengarnya sebelumnya.

Perbaiki saya jika saya salah tetapi kesan saya adalah bahwa teknik ini masih jarang digunakan dan kebanyakan orang tidak tahu itu ada. Mengapa?

Apakah Anda tahu ada komunitas pemrograman di mana penggunaan reverse debugging adalah umum?

Informasi latar belakang:

Philipp Claßen
sumber
47
Untuk kepentingan mereka yang tidak tahu keberadaannya, apa itu debugging terbalik?
Mason Wheeler
5
MS menyebut sistem mereka intellitrace yang tampaknya mirip dengan yang Anda sebut revese debugging, bisa jadi soal beberapa nama tergantung pada lingkungan sehingga membuatnya kurang digunakan.
Ryathal
1
Hanya untuk apa nilainya: ini benar-benar jauh lebih tua dari yang Anda sadari - Microsoft mendukungnya di QuickC (sekitar 1989 atau '90, jika ingatanku).
Jerry Coffin
41
@MasonWheeler, jelaskan debugging adalah tindakan menambahkan bug ke kode. Saya tidak setuju dengan premis OP bahwa ini adalah praktik yang tidak biasa.
Ben Lee
3
@ Benee, kami menyebut itu rebugging.
OldFart

Jawaban:

27

Untuk satu, berjalan dalam mode debug dengan merekam aktif sangat mahal dibandingkan dengan mode debug normal; itu juga mengkonsumsi lebih banyak memori.

Lebih mudah untuk mengurangi granularity dari level baris ke level fungsi panggilan. Misalnya, debugger standar dalam gerhana memungkinkan Anda untuk "menjatuhkan ke bingkai," yang pada dasarnya adalah lompatan kembali ke awal fungsi dengan mengatur ulang semua parameter (tidak ada yang dilakukan pada heap yang dikembalikan, dan finallyblok tidak dieksekusi , jadi itu bukan debugger terbalik sejati; hati-hati tentang itu).

Perhatikan bahwa ini telah tersedia selama beberapa tahun sekarang dan bekerja bersama-sama dengan penggantian kode-panas.

ratchet freak
sumber
1
Jawaban yang sangat bagus Saya dapat mengkonfirmasi bahwa rekaman itu mahal. Anda harus mengaktifkannya tepat sebelum Anda memasukkan bagian penting dari aplikasi Anda, yang tidak selalu sepele. Saya juga setuju bahwa "drop to frame" seringkali cukup baik. Ini tidak bekerja dengan baik dengan loop atau algoritma rekursif.
Philipp Claßen
3
Itu sampai rr ( rr-project.org ). kecepatan saat merekam eksekusi menggunakan rr hampir tidak lebih lambat. Anda kemudian dapat memutar ulang, masuk, mundur, mengatur pengamat di IDE favorit Anda ( github.com/mozilla/rr/wiki/Using-rr-in-an-IDE ) ... Cara Anda men-debug kode Anda tidak akan pernah menjadi sama.
jyavenard
11

Seperti yang telah disebutkan sebelumnya, kinerja adalah kunci misalnya dengan debugging reversibel gdb, menjalankan sesuatu seperti gzip melihat perlambatan 50.000x dibandingkan dengan menjalankan secara asli. Namun ada alternatif komersial: Saya bekerja untuk Undo undo.io , dan produk UndoDB kami melakukan hal yang sama tetapi dengan perlambatan kurang dari 2x. Ada debugger komersial reversibel lain yang tersedia juga.

pengguna1839284
sumber
1
Menarik, saya pasti akan mencobanya. Dalam beberapa artikel, dinyatakan bahwa ini gratis untuk penggunaan non-komersial tetapi saya tidak menemukan informasi yang mengonfirmasi hal itu di beranda Anda. Apakah ini masih benar? Terima kasih telah mengungkapkan afiliasi Anda.
Philipp Claßen
2
Berapa harga untuk versi Pemula dan Profesional UndoDB? Saya tidak melihat mereka di halaman edisi UndoDB.
tcrosley
3
Bagaimana kalian membandingkan dengan Mozilla rr?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
10

Untuk tinjauan umum tentang pilihan dan produk teknologi, lihat serangkaian posting blog yang saya tulis sekitar setahun yang lalu (dan beberapa tindak lanjut sejak itu):

Perasaan saya mengapa begitu sedikit digunakan adalah bahwa ia membutuhkan perangkat keras khusus, atau menggunakan debugger khusus, atau mengatur sistem Anda dengan benar. Sayangnya, kebanyakan orang tidak menginvestasikan waktu untuk mendapatkan nilai maksimum dari alat debug mereka.

Dan fakta bahwa "default murah" dari gdb hampir sangat lambat dan memiliki beberapa masalah stabilitas untuk semuanya kecuali sistem target yang paling umum.

jakobengblom2
sumber
4

Dari pengalaman saya sebagai insinyur penjualan untuk debugger TotalView, orang tahu bahwa itu ada tetapi mereka tidak berpikir itu berfungsi, terlepas dari perlambatan (dapat diterima atau tidak).

University of Cambridge baru-baru ini melakukan survei berjudul "Kegagalan untuk Mengadopsi Biaya Debugging Balik Ekonomi Global $ 41 Miliar Setiap Tahun" .

Dan kembali ke GDB, saya telah mendengar (banyak) bahwa penurunan membuatnya tidak dapat digunakan pada aplikasi "kehidupan nyata".

Saya pribadi senang mendengar kabar dari lebih banyak orang yang menggunakan debugging terbalik pada aplikasi selain "Hello world!"

SebGR
sumber
4
Saya pikir akan jauh lebih baik untuk menautkan studi ini daripada spam 'Undo Software' yang berpura-pura belajar.
Bulwersator
1
Di pekerjaan saya sebelumnya, saya bekerja membangun debugger terbalik ( ghs.com/products/timemachine.html ). Kami menggunakan debugger secara internal banyak, dan saya dapat memberitahu Anda, itu luar biasa. Tentu saja itu bagus pada kondisi balapan yang sangat berbulu, tapi itu lebih dari itu. Ketika melakukan debugging terbalik selalu ada, mentalitas Anda tentang perubahan debugging. Anda mengulang lebih sedikit, dan Anda bisa kurang berhati-hati dengan cara Anda menguji kode Anda. Anda juga dapat menyimpan proses eksekusi dan mengirimkannya ke seseorang, jadi itu bagus untuk menemukan bug dalam kode orang lain.
speedplane
2

Saya pikir penting untuk memperluas sedikit lebih jauh pada debugging "terbalik" atau "bersejarah" ini. Saya pikir untuk memahami sistem dan perilaku yang kompleks pada mereka, untuk memutar ulang "peristiwa" yang membuat negara eksplisit sangat penting.

Yang ingin saya ungkapkan adalah bahwa Anda tidak sendirian dalam bertanya-tanya mengapa teknik ini tidak begitu banyak diterapkan saat ini atau mengapa masalah terkait jarang dibahas dengan jelas.

Jadi mari kita tekankan dua konsep yang sangat penting di sini:

1.Untuk memahami sistem pemrograman, sangat membantu untuk membuat keadaan menjadi eksplisit

2.Untuk lebih memahami sistem pemrograman, memutar ulang urutan keadaan (peristiwa) dapat banyak membantu.

Berikut adalah beberapa sumber yang menangani masalah dan mengusulkan atau merancang solusi untuk masalah tersebut (berurusan dengan keadaan dalam sistem yang kompleks):

-Luar dari bit tar, kertas: http://shaffner.us/cs/papers/tarpit.pdf Gagasan utama: hindari, isolasi, atau buat status eksplisit

-CQRS http://www.cqrs.nu/ Ini adalah kombinasi dari dua konsep: Segregasi Command Query dan Event Sourcing. Ada beberapa implementasi yang berbeda (Java, C #, Scala). Pemutaran ulang urutan Tate dan pengembangan model domain adalah bagian penting di sini.

Jika Anda benar-benar memperkecil dan melihat gambar yang sangat luas, Anda sudah dapat melihat bahwa dengan "naiknya" pemrograman fungsional orang sudah ((tidak) secara sadar) tertarik pada fp karena membuat keadaan eksplisit! Tapi itu hanya berurusan dengan poin satu, untuk mengatasi yang kedua Anda memerlukan konsep lain yang bisa "longgar" digambarkan sebagai pemrograman reaktif fungsional.

Jadi Anda bisa mengatakan semuanya dengan baik dan bagus tetapi siapa yang sebenarnya menggunakan CQRS dan FRP? Saya akan mengatakan (IMO karena saya tidak memiliki angka nyata) sebenarnya banyak perusahaan hanya karena mereka tidak tahu pekerjaan yang mereka lakukan memiliki terminologi ini. Mungkin Anda sedikit google dan Anda mendengar dari perusahaan yang menggunakan CQRS, ada beberapa kisah sukses yang sudah ada. FRP juga meningkat perlahan sebagai contoh yang bisa saya berikan kepada Netflix: http://techblog.netflix.com/2013/02/rxjava-netflix-api.html Yang baru saja merilis implementasi RX yang sebenarnya berbasis NET. (Tetapi sudah implementasi Javascript juga). Jadi Orang sudah menggunakan teknik ini hari ini, DALAM BESAR untuk memahami sistem yang kompleks dan membuatnya lebih baik. Itu sebabnya mereka menggunakan teknik debugging terbalik.

Andreas Secheert
sumber