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?


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


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.


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)


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


6

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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.