Biasanya untuk memasang debuger ke jvm yang sedang berjalan, Anda perlu memulai jvm dengan argumen seperti berikut:
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n
Sekarang jika saya ingin men-debug proses yang tidak dimulai dalam mode debug, apa yang dapat saya lakukan?
Situasi ini muncul ketika sistem produksi (yaitu dimulai tanpa debug args) menunjukkan bug 'acak' (saya menggunakan istilah longgar). Jadi saya tidak bisa memulai ulang jvm dengan argumen yang sesuai, karena tidak ada yang tahu bagaimana mereproduksi bug lagi. Apakah tidak mungkin untuk melampirkan ke JVM dalam situasi ini?
Hanya untuk memperjelas, tidak mungkin menggunakan alat seperti jdb untuk melampirkan ke JVM yang sudah berjalan kecuali jika mereka dimulai dalam mode debug
dari halaman manual JVM
Cara lain untuk menggunakan jdb adalah dengan melampirkannya ke VM Java yang sudah berjalan. VM yang akan di-debug dengan jdb harus dimulai dengan opsi berikut:
sumber
Jawaban:
Anda mungkin dapat menggunakan jsadebugd ( JDK ) untuk memasang server debug ke proses (tersedia di Windows dengan Alat Debugging untuk Windows ). Ini ditandai sebagai eksperimental, jadi Anda mungkin ingin mencobanya di mesin uji terlebih dahulu.
Pemakaian:
Nama konektor withe arg dapat ditemukan menggunakan
jdb -listconnectors
.sumber
jsadebugd
diganti denganjhsdb debugd
. Jadi itu menjadijhsdb debugd --pid <pid>
. Lihat slide ceramah yang menyajikan jhsdb dan dokumen untuk jhsdbSADebugServerAttachingConnector
telah dihapusjdb
juga, dan saya pikir penggantinya seharusnyajhsdb hsdb
/jhsdb clhsdb
. Saya tidak dapat menemukan dokumen apa pun tentang argumen apa yang harus diberikanjhsdb clhsdb
.di sumber rusia soviet membaca Anda
sumber
VisualVM bukanlah debugger, tetapi Anda bisa mendapatkan thread dump dan heap dump darinya yang dapat berguna dalam mendiagnosis beberapa masalah. Fitur yang paling berguna membutuhkan JVM 5 atau 6.
sumber
menggunakan jstack (berguna jika terjadi kebuntuan) atau plugin VisualVM btrace juga bisa melakukan trik
sumber
Anda selalu dapat menggunakan jdb dan debug dengan tangan: P
sumber