Lampirkan debugger IntelliJ IDEA ke proses Java yang sedang berjalan

237

Apakah mungkin untuk melampirkan debugger IntelliJ IDEA ke proses Java yang sedang berjalan? Jika ya, bagaimana?

Marco
sumber
3
Tentu saja. Anda perlu membuat konfigurasi Run / Debug "Remote". Lebih lanjut di sini
Vic
2
Um, argumen baris perintah ini BACA HANYA pada 14.0.2. Anda hanya dapat mengedit beberapa saja, yang tidak membantu menyelesaikan masalah dalam pertanyaan ini. Adakah cara untuk memperbaikinya?
nuzzolilo
Jawabannya ada di sini: stackoverflow.com/questions/51207430/…
RoutesMaps.com

Jawaban:

373

Iya! Inilah cara Anda mengaturnya.

Jalankan Konfigurasi

Buat konfigurasi Jalankan jauh:

  1. Jalankan -> Edit Konfigurasi ...
  2. Klik "+" di kiri atas
  3. Pilih opsi "Remote" di panel paling kiri
  4. Pilih nama (saya menamai milik saya "debugging jarak jauh")
  5. Klik "OK" untuk menyimpan:

masukkan deskripsi gambar di sini

Opsi JVM

Konfigurasi di atas menyediakan tiga bidang hanya baca. Ini adalah opsi yang memberi tahu JVM untuk membuka port 5005 untuk debugging jarak jauh ketika menjalankan aplikasi Anda. Tambahkan yang sesuai ke opsi JVM dari aplikasi yang Anda debug. Salah satu cara Anda melakukan ini adalah seperti ini:

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

Tetapi itu tergantung pada bagaimana Anda menjalankan aplikasi Anda. Jika Anda tidak yakin yang mana dari ketiganya berlaku untuk Anda, mulailah dengan yang pertama dan turun daftar sampai Anda menemukan yang berfungsi.

Anda dapat mengubah suspend=nke suspend=yuntuk memaksa aplikasi Anda menunggu sampai Anda terhubung dengan IntelliJ sebelum mulai. Ini bermanfaat jika breakpoint yang ingin Anda tekan terjadi pada startup aplikasi.

Debug

Mulai aplikasi Anda seperti biasa, lalu di IntelliJ pilih konfigurasi baru dan tekan 'Debug'.

masukkan deskripsi gambar di sini

IntelliJ akan terhubung ke JVM dan memulai debugging jarak jauh.

Anda sekarang dapat men-debug aplikasi dengan menambahkan breakpoint ke kode Anda di mana yang diinginkan. Output aplikasi akan tetap muncul di mana pun sebelumnya, tetapi breakpoints Anda akan muncul di IntelliJ.

Cory Klein
sumber
2
Opsi "Remote" tidak ada di Intellij IDEA 15.0.2 saya di mac os el capitan. Bagaimana saya bisa mendapatkan opsi itu?
user674669
@ user674669 Saya tidak yakin. Mungkin Remotetidak tersedia di edisi komunitas? Saya menggunakan versi berbayar. Adakah yang bisa dengan edisi komunitas mengonfirmasi?
Cory Klein
@CoryKlein Apakah Anda tahu cara mengambil output dari System.out.printlndi IntelliJ saat melakukan debug jarak jauh?
Don Rhummy
1
@ DonRhummy Jika Anda mengetahui caranya, saya akan dengan senang hati menambahkan informasi itu ke jawaban ini, tetapi AFAIK IntelliJ saat ini tidak memiliki dukungan untuk pemipaan stdout dan stderr dari aplikasi jarak jauh kembali ke IntelliJ.
Cory Klein
Jika server jarak jauh hanya dapat diakses melalui ssh bagaimana cara menentukan file kunci?
vach
44

Itu mungkin, tetapi Anda harus menambahkan beberapa flag JVM ketika Anda memulai aplikasi Anda.

Anda harus menambahkan konfigurasi debug jarak jauh: Edit konfigurasi -> Jarak Jauh.

Kemudian Anda akan menemukan parameter jendela dialog yang ditampilkan yang harus Anda tambahkan ke eksekusi program, seperti:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

Kemudian ketika aplikasi Anda diluncurkan, Anda dapat melampirkan debugger Anda. Jika Anda ingin aplikasi Anda menunggu sampai debugger terhubung, ubah flag suspend menjadi y ( suspend=y)

Jakub Kubrynski
sumber
Itu membingungkan saya bahwa Anda mengedit input di bawah ini dan ini kemudian memperbarui string opsi di atas (setidaknya 13.1 M).
Carl G
7
Um, argumen baris perintah ini BACA HANYA pada 14.0.2. Anda dapat mengedit beberapa dari mereka. Adakah cara untuk memperbaikinya?
nuzzolilo
1
Juga, proses apa yang Anda lampirkan dengan mengatur opsi-opsi itu?
nuzzolilo
5
Yang pertama bekerja untuk saya. Catatan untuk orang lain - saya harus menentukan ini sebelum bendera-jar.
jim
2
@Nuzzolilo, argumen baris perintah yang ditampilkan dalam ide hanya untuk tujuan tampilan dan karenanya hanya baca-saja. Mereka tidak seharusnya ditambahkan ke ide tetapi aplikasi java jarak jauh yang ingin Anda debug.
Ganesh Krishnan
6

di AndroidStudio atau ide

  1. Konfigurasi aplikasi akan di-debug, buka Edit Konfigurasi

tambahkan "Opsi VM" Konfigurasi “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” ingat "alamat"

masukkan deskripsi gambar di sini

  1. Konfigurasi Debugger Jarak Jauh jika tidak keluar, Klik + untuk menambahkan

tentukan "Port" sama seperti pada Langkah 1 "alamat" masukkan deskripsi gambar di sini

Tagihan
sumber
6

Juga, jangan lupa Anda perlu menambahkan bendera "-Xdebug" di aplikasi JAVA_OPTS jika Anda ingin terhubung dalam mode debug.

Maks
sumber
0

Saya juga menggunakan aplikasi Tomcat GUI (dalam kasus saya: C: \ tomcat \ bin \ Tomcat9w.bin).

  • Buka tab Java :

    masukkan deskripsi gambar di sini

  • Tetapkan properti Java Anda, misalnya:

    Mesin virtual Java

    C: \ Program Files \ Java \ jre-10.0.2 \ bin \ server \ jvm.dll

    Mesin virtual Java

    C: \ tomcat \ bin \ bootstrap.jar; C: \ tomcat \ bin \ tomcat-juli.jar

    Opsi Java :

    -Dcatalina.home = C: \ tomcat

    -Dcatalina.base = C: \ tomcat

    -Djava.io.tmpdir = C: \ tomcat \ temp

    -Djava.util.logging.config.file = C: \ tomcat \ conf \ logging.properties

    -agentlib: jdwp = transport = dt_socket, server = y, suspend = n, address = *: 8000

    Opsi Java 9 :

    --add-opens = java.base / java.lang = ALL-UNNAMED

    --add-opens = java.base / java.io = ALL-UNNAMED

    --add-opens = java.rmi / sun.rmi.transport = ALL-UNNAMED

Taras Melnyk
sumber