Pertanyaan Mengapa program debugged sangat melambat ketika menggunakan debugging dengan metode masuk?


Saya menggunakan antarmuka jdi untuk membuat debugger dan ketika saya menggunakan MethodEntryRequests untuk mengaktifkan entri metode menelusuri program debugged melambat dengan faktor puluhan. Saya telah menetapkan filter untuk utas utama dan menangguhkan kebijakan ke SUSPEND_EVENT_THREAD. Classfilter terbatas dan jika saya mencetak setiap peristiwa yang diterima, itu tidak menunjukkan lebih dari beberapa lusin dari mereka sehingga seharusnya tidak menerima terlalu banyak dari mereka. Saya melakukan debugging secara lokal dan memiliki jenis perintah berikut dengan program java yang disempurnakan:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=1337


32
2018-04-15 10:43


asal


Jawaban:


Jawaban singkatnya adalah eksekusi dijalankan melalui interpreter ketika entri metode ditetapkan. Saya tidak berpikir ada sekitar ini ...

Ini digunakan untuk semua kode yang berjalan dalam mode debug tetapi itu ditingkatkan dalam 1.4... sekarang HotSpot berfungsi untuk debugging 'kecepatan penuh' kecuali dalam kasus entri dan keluarnya metode, titik pantauan dan ketika loncatan tunggal atau dalam metode yang mengandung breakpoint.


31
2018-04-24 22:08



2 alasan:

  1. itu harus menambahkan pemeriksaan pada setiap entri metode (tidak ada pilihan untuk men-tweak beberapa metode)
  2. penyisipan metode menjadi tidak mungkin (metode yang sangat kecil berjalan 10-100x kali lebih lambat)

hal yang sama berlaku untuk profiler dan .net apps


11
2018-04-26 12:36



Saya berasumsi bahwa debugger harus bangun untuk setiap pemanggilan metode untuk melihat apakah itu cocok dengan yang dipilih untuk diputuskan. Karena itu harus memeriksa setiap metode panggilan untuk pertandingan potensial sebelum dapat mengeksekusinya jauh lebih lambat daripada jika tidak harus melakukan semua pemeriksaan ini.


5
2018-04-21 03:26