Debugging jarak jauh Tomcat dengan Eclipse

95

Saya tidak bisa men-debug aplikasi kucing jantan melalui Eclipse. Saya sudah mengatur

CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

dan kemudian saya menjalankan bin/catalina.sh, di mana saya melihat output mengatakan itu mendengarkan untuk dt_socketdi port 8000. Tetapi setiap kali saya mencoba menghubungkan ke port 8000di Eclipse (dengan menambahkan entri di menu aplikasi java jarak jauh), ia mengeluh tentang koneksi yang ditolak. Ada ide?

pemenang
sumber
bisakah Anda memposting konfigurasi jarak jauh Anda yang digunakan di gerhana.
Sean

Jawaban:

133

Bisakah Anda memeriksa apakah ini berhasil?

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

catalina.sh jpda start
Raghuram
sumber
4
Sebenarnya, milikmu telah memperbaikinya. Eclipse tidak benar-benar mengatakan apa pun ketika berhasil terhubung, dan menghubungkan kembali untuk kedua kalinya memaksa kesalahan. Jadi itu berhasil, tapi saya tidak menyadarinya.
pemenang
18
Ini untuk mereka yang menggunakan OS Windows:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start
Lee Chee Kiam
1
Apa yang dilakukan opsi suspend = n?
Trismegistos
2
@Tokopedia suspendmenentukan apakah jvm harus menunggu debugger atau melanjutkan. Lihat dokumen ini .
Raghuram
9
Sebenarnya catalina.sh jpda startsudah cukup. Catalina.sh memiliki beberapa JPDA_*parameter yang dapat digunakan, misalnya untuk mengubah port, lihat file untuk dokumentasi.
zpon
53

Saya menghabiskan beberapa waktu untuk ini untuk mendapatkan informasi yang benar.

Jadi, inilah informasi rinci langkah demi langkah.

Lingkungan: Windows 7

Versi TomCat: 7.0

IDE: Gerhana

Konfigurasi yang akan ditambahkan untuk mengaktifkan debugging jarak jauh dengan in tomcat adalah

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

Saya tidak merekomendasikan konfigurasi di atas dari lingkungan non windows. Untuk menambahkan konfigurasi di atas, klik dua kali pada server tomcat yang akan tersedia di tampilan server. Temukan tangkapan layar di bawah ini. masukkan deskripsi gambar di sini

Sekarang tambahkan konfigurasi lingkungan runtime di atas ke tomcat. Untuk cek di bawah ini screenshot.

masukkan deskripsi gambar di sini

Sekarang masuk ke tab Arugments di Edit properti konfigurasi peluncuran seperti yang ditunjukkan di bawah tangkapan layar.

masukkan deskripsi gambar di sini

Bagian argumen GoTo VM menambahkan baris ini.

-Xdebug

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

masukkan deskripsi gambar di sini

Sekarang ada tombol debug yang tersedia di toolbar eclipse.

masukkan deskripsi gambar di sini

Dalam konfigurasi Debug temukan "Aplikasi Java Jarak Jauh" dan klik dua kali di atasnya.masukkan deskripsi gambar di sini

Di kolom Name masukkan nama yang Anda suka.

Dari bidang proyek menggunakan tombol jelajah pilih proyek yang ingin Anda lakukan debug jarak jauh.

Nama host tidak lain adalah alamat host. Di sini saya bekerja secara lokal jadi "localhost".

Terakhir kolom Port nilainya harus 8000. Selain kolom teks Name dan Project, dua kolom lainnya Host dan port akan diisi oleh eclipse itu sendiri jika tidak membuat Anda memiliki nilai yang sama seperti yang disebutkan. Periksa Screen shot untuk info.masukkan deskripsi gambar di sini

Sekarang klik kanan pada TomcatServer di konsol server pilih Tambah dan Hapus dari menu konteks. Dari dialog ini Anda dapat menambahkan proyek ke server.

Sekarang jalankan server Tomcat.

masukkan deskripsi gambar di sini

Sekarang jalankan TomCatDebugConfiguration dari Alat Debug.

Terakhir buka browser internal atau eksternal dan jalankan proyek Anda. Jika kontrol eksekusi mencapai break point maka gerhana akan meminta perspektif debug.

Ravi MCA
sumber
47

Di direktori tomcat bin tempat catalina.batatau .shditemukan (alias {CATALINA_BASE} / bin), edit (buat jika tidak ada):

setenv.bat/.sh

Tambahkan baris berikut:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

Hanya itu yang perlu Anda lakukan, Anda tidak perlu mengedit file catalina.bat(atau .sh).

Lihat komentar di catalina.batatau catalina.sh.

Anda mungkin harus menyesuaikan sintaks untuk lingkungan / situasi tertentu Anda. Misalnya, jika Anda sudah menentukan CATALINA_OPTS, Anda mungkin melakukan sesuatu seperti ini (di lingkungan windows):

set CATALINA_OPTS=%CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8088,server=y,suspend=n

Untuk men-debug dari Eclipse:

run-> Konfigurasi debug ...-> Aplikasi Java Jarak Jauh-> Baru

dan tentukan nama, proyek yang Anda debug, dan host tomcat serta port debug yang ditentukan di atas.

karl
sumber
Ini berfungsi, Anda perlu mengatur CATALINA_OPTS ini di setenv.sh yang ada di direktori tomcat / bin. Terima kasih.
Amit Kumar
1
Di setenv.bat saya itu JAVA_OPTS (kucing jantan 7)
vikingsteve
Halo Philip, menambahkan beberapa catatan yang mungkin membantu, jika tidak: versi os, tomcat, dan eclipse mana yang Anda gunakan?
karl
di setenv.bat dalam bindirektori letakkan baris seperti set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n, gunakan startup.batuntuk memulai tomcat
Paramvir Singh Karwal
33

Dalam catalina.batfile, harap ubah di bawah ini.

  • Langkah 1: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

  • Langkah 2: JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

  • Langkah 3: Jalankan Tomcat dari command prompt seperti di bawah ini: catalina.sh jpda start

  • Langkah 4: Kemudian di eclipse buat konfigurasi debug

    1. Beri nama apapun untuk konfigurasi.
    2. Berikan project name.
    3. Berikan tipe koneksi sebagai Standard(Socket Attach)
    4. host sebagai localhost
    5. port as 8000(atau nomor port apa pun, tetapi itu juga harus sama di tempat lain).
RAJ
sumber
Saya telah menemukan CATALINA_OPTS di bagian berikut di catalina.bat,: set shift doStop ACTION = stop set CATALINA_OPTS = goto execCmd: shift set doConfigTest ACTION = configtest set CATALINA_OPTS = goto execCmd di mana untuk mengeditnya? Bisakah Anda mengunggah konten catalina.bat Anda?
Gopakumar NG
Sepertinya Anda menulis hal yang sama dua kali. Saya melewatkan langkah 1 Anda - dan berhasil. Dapatkah Anda mengonfirmasi bahwa CATALINA_OPTS tidak perlu diubah?
Henry Aloni
untuk perbedaan antara lihat CATALINA_OPTS & JPDA_OPTS lihat: stackoverflow.com/questions/11222365/…
Mike R
1
Ini tidak akan berfungsi di Tomcat 8. Agar dapat berfungsi di Tomcat 8, Anda harus meninggalkan langkah 1.
Dave
@Rumahsakitaulia Ini bekerja sepenuhnya di Tomcat 6. Terima kasih banyak.
T8Z
7

Banyak dari jawaban di atas benar, tetapi ingat bahwa secara default debugger hanya akan mendengarkan di localhost. Jika Anda men -debug server jarak jauh, Anda perlu menentukan alamat ip untuk didengarkan, misalnya

JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, alamat = 10.1.1.33 : 8000, server = y, suspend = n"

catalina.sh jpda mulai

Perhatikan bahwa alamatnya sekarang adalah 10.1.1.33 : 8000

Tentu saja, Anda juga dapat memeriksa IP mana yang sebenarnya sedang digunakan, dengan menjalankan

netstat -an

pada windows dan Linux dan menyaring port dengan find(Windows) atau grep(Linux).

COLEK
sumber
Saya pikir maksud Anda PORT mana yang sebenarnya sedang digunakan bukan IP yang mana .
Abdollah
1
Tidak, maksud saya "alamat IP". Jika Anda melakukan debugging jarak jauh (dari komputer lain), Anda harus dapat menentukan alamat IP yang berbeda dari localhost atau 127.0.0.1. Tentu saja Anda juga akan selalu membutuhkan nomor port.
DAB
5

Jalankan saja ./catalina.sh jpda start(garpu) atau ./catalina.sh jpda run(bukan garpu, tidak disebutkan dalam bantuan). Semua opsi yang disebutkan di sini default ke nilai-nilai waras.

atamanroman
sumber
5

Izinkan saya berbagi cara sederhana untuk mengaktifkan mode debugging jarak jauh di tomcat7 dengan eclipse (Windows).

Langkah 1: buka file bin / startup.bat
Langkah 2: tambahkan baris di bawah ini untuk debugging dengan opsi JDPA (itu harus memulai baris file)

    set JPDA_ADDRESS=8000  
    set JPDA_TRANSPORT=dt_socket  

Langkah 3: di file yang sama .. pergi ke akhir file, ubah baris ini -

    call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%  
    instead of line  
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%  

langkah 4: lalu jalankan saja bin> startup.bat (jadi sekarang server kucing jantan Anda berjalan dalam mode jarak jauh dengan port 8000).

langkah 5: setelah itu mari hubungkan proyek sumber Anda dengan eclipse IDE dengan klien jarak jauh.

step6: Di Eclipse IDE, buka "debug Configuration"

step7: klik "aplikasi java jarak jauh" dan kemudian klik "Baru"

step8. di tab "hubungkan" setel nilai parameter

   project= your source project  
   connection Type: standard (socket attached)   
   host: localhost  
   port:8000  

step9: klik terapkan dan debug.

jadi akhirnya klien jarak jauh eclipse Anda terhubung dengan server kucing jantan yang sedang berjalan (mode debug).

Semoga pendekatan ini bisa membantu Anda.

Salam..

Mayen
sumber
4

Ubah catalina.bat untuk ditambahkan

set JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n" 

dan

CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

Opsional: Tambahkan baris di bawah ini untuk menjalankan mode debug secara default saat Anda menjalankan startup.bat

call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

Eclipse atau STS pilih konfigurasi debug klik kanan -> baru

connection type -> Standard socket Attach
Port -> 8000 (as given in the CATALINA_OPTS)
Host -> localhost or IP address
shermi
sumber
Informasi ini untuk WINDOWS, tetapi saya kebetulan berada di windows dan itu membantu saya. Terima kasih!
Deringkan
2

Jika masih semua cara di atas tidak berhasil, Anda selalu dapat menambahkan ke skrip

    set "JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
shachar
sumber
2

Di tomcat 7, catalina.sh memiliki kode ini:

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi

Ii menyiratkan bahwa Anda dapat mengatur JPDA dengan:

export JPDA_TRANSPORT=dt_socket
export JPDA_ADDRESS=8000
export JPDA_SUSPEND=n

Atau dengan:

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

Dan terakhir gunakan:

catalina.sh jpda start

Salam

Marcelo Salazar
sumber
Tomcat 8: Variabel JPDA_ dapat disetel di setenv.sh tanpa perlu 'mengekspor'. Dalam kasus apapun, param pertama panggilan startup harus 'jpda'. Jika Anda memulai tomcat sebagai layanan, yang terbaik adalah memodifikasi skrip $ {CATALINA_HOME} /bin/startup.sh, tambahkan parameter 'jpda' di baris terakhir sebelum 'start': ´´exec "$ PRGDIR" / "$ EXECUTABLE "jpda mulai" $ @ "´´.
Heri
1

Saya mengalami masalah ini saat menjalankan Tomcat di dalam wadah Docker. Untuk memperbaikinya, pastikan Anda menambahkan argumen '-p 8000: 8000' dalam perintah jalankan buruh pelabuhan untuk mengekspos port ini ke mesin lokal Anda. Anda tentu saja membutuhkan file setenv.sh di $ {CATALINA_HOME} / bin / di dalam container Anda juga.

Cheen
sumber
0

Memodifikasi startup.bat dengan CATALINA_OPTS AND JPDA_OPTS tidak berhasil untuk saya tetapi menambahkannya ke catalina.bat berhasil

  1. Ubah catalina.bat

CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, alamat = 8000, server = y, suspend = n"

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

  1. Ubah startup.bat untuk menyertakan jpda

ubah panggilan "% EXECUTABLE%" mulai% CMD_LINE_ARGS% menjadi

panggil "% EXECUTABLE%" jpda start% CMD_LINE_ARGS%

Kemudian konfigurasikan aplikasi java jarak jauh dalam konfigurasi debug Anda di Eclipse.

David Stableforth
sumber
0

Pertama-tama, jika Anda membuka catalina.bat dengan editor teks, Anda akan melihat bahwa: "Jangan setel variabel dalam skrip ini ....." Jadi jangan pernah mengubahnya di skrip itu, sebagai gantinya Anda dapat melakukan langkah-langkah di bawah ini:

  1. Ini menyarankan Anda untuk membuat file bat baru dengan nama "setenv.bat".
  2. Kemudian atur 2 variabel di file bat itu seperti:

    setel CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, address = 8000, server = y, suspend = n"

    set JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, address = 8000, server = y, suspend = n"

  3. Terakhir jalankan di cmd bahwa: "catalina.bat jpda start"

  4. Di IDE, buat konfigurasi debug jarak jauh dan setel host ke ip dan port server terkait ke 8000.

Mustafa Kemal
sumber
0

Untuk versi apache-tomcat-8.5.28 lakukan saja ini,

catalina.bat jpda start

Karena pengaturan default sudah dikonfigurasi untuk kita di catalina.bat sebagai

jika tidak "% JPDA_OPTS%" == "" goto gotJpdaOpts set JPDA_OPTS = -agentlib: jdwp = transport =% JPDA_TRANSPORT%, address =% JPDA_ADDRESS%, server = y, suspend =% JPDA_SUSPEND%

Jadi tidak perlu konfigurasi lain. Dan ketika Anda menjalankan perintah catalina.bat jpda start, Anda dapat melihat port debug 8000 terbuka.

Lyju I Edwinson
sumber
-2

Untuk apache-tomcat-8.5.28

modifikasi JDPA_OPTSseperti di bawah ini lalu jalankan seperticatalina.bat jpda start

JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=8000,server=y,suspend=$JPDA_SUSPEND"
Madhu K
sumber