การดีบักระยะไกล Tomcat ด้วย Eclipse


95

ฉันไม่สามารถดีบักแอปพลิเคชัน tomcat ผ่าน Eclipse ได้ ฉันได้ตั้งค่า

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

และจากนั้นผมทำงานbin/catalina.shที่ฉันเห็นผลลัพธ์บอกว่ามันฟังสำหรับบนdt_socket port 8000แต่เมื่อใดก็ตามที่ฉันพยายามเชื่อมต่อกับพอร์ต8000ใน Eclipse (โดยการเพิ่มรายการในเมนูแอปพลิเคชัน java ระยะไกล) มันบ่นเกี่ยวกับการเชื่อมต่อที่ถูกปฏิเสธ ความคิดใด ๆ ?


คุณช่วยโพสต์การกำหนดค่าระยะไกลที่ใช้ใน eclipse ได้ไหม
Sean

คำตอบ:


134

คุณสามารถตรวจสอบว่าใช้งานได้หรือไม่?

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

catalina.sh jpda start

4
อันที่จริงคุณแก้ไขได้ Eclipse ไม่ได้พูดอะไรเลยเมื่อเชื่อมต่อสำเร็จและการเชื่อมต่อใหม่ครั้งที่สองจะทำให้เกิดข้อผิดพลาด มันใช้งานได้ แต่ฉันไม่ได้สังเกต
ผู้ชนะ

19
สำหรับผู้ที่ใช้ระบบปฏิบัติการ Windows:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start
Lee Chee Kiam

1
ตัวเลือก Suspend = n ทำอะไร?
Trismegistos

2
@Trismegistos. suspendระบุว่า jvm ควรรอดีบักเกอร์หรือดำเนินการต่อ ดูเอกสารนี้
Raghuram

11
จริงๆแล้วcatalina.sh jpda startควรจะเพียงพอ catalina.sh มีJPDA_*พารามิเตอร์สองสามตัวที่สามารถใช้ในการเปลี่ยนพอร์ตได้เช่นดูไฟล์สำหรับเอกสารประกอบ
zpon

55

ฉันใช้เวลากับเรื่องนี้เพื่อให้ได้ข้อมูลที่ถูกต้อง

ดังนั้นนี่คือข้อมูลโดยละเอียดทีละขั้นตอน

สภาพแวดล้อม: Windows 7

TomCat เวอร์ชัน: 7.0.2

IDE: Eclipse

การกำหนดค่าที่จะเพิ่มสำหรับการเปิดใช้งานการดีบักระยะไกลด้วยใน tomcat คือ

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

ฉันไม่แนะนำให้กำหนดค่าข้างต้นจากสภาพแวดล้อมที่ไม่ใช่ Windows ในการเพิ่มการกำหนดค่าด้านบนให้ดับเบิลคลิกที่เซิร์ฟเวอร์ tomcat ซึ่งจะพร้อมใช้งานในมุมมองเซิร์ฟเวอร์ ค้นหาภาพหน้าจอด้านล่าง ป้อนคำอธิบายภาพที่นี่

ตอนนี้เพิ่มการกำหนดค่าสภาพแวดล้อมรันไทม์ด้านบนไปยัง tomcat สำหรับการตรวจสอบนี้ด้านล่างภาพหน้าจอ

ป้อนคำอธิบายภาพที่นี่

ตอนนี้ไปที่แท็บ Arugments ในแก้ไขคุณสมบัติการกำหนดค่าการเปิดตัวดังที่แสดงในภาพหน้าจอด้านล่าง

ป้อนคำอธิบายภาพที่นี่

ส่วนอาร์กิวเมนต์ GoTo VM เพิ่มบรรทัดเหล่านี้

-Xdebug

-agentlib: jdwp = transport = dt_socket ที่อยู่ = 8000 เซิร์ฟเวอร์ = y ระงับ = n

ป้อนคำอธิบายภาพที่นี่

ตอนนี้ต้องแก้ไขปุ่มที่มีอยู่บนแถบเครื่องมือ eclipse

ป้อนคำอธิบายภาพที่นี่

ในการกำหนดค่าการดีบักให้ค้นหา "Remote Java Application" และดับเบิลคลิกที่มันป้อนคำอธิบายภาพที่นี่

ในฟิลด์ชื่อให้ป้อนชื่อที่คุณต้องการ

จากฟิลด์โปรเจ็กต์โดยใช้ปุ่มเรียกดูให้เลือกโปรเจ็กต์ที่คุณต้องการทำการดีบักระยะไกล

ชื่อโฮสต์คืออะไรนอกจากที่อยู่โฮสต์ ที่นี่ฉันทำงานในพื้นที่จึงเป็น "localhost"

สุดท้ายคอลัมน์ Port ค่าควรเป็น 8000 นอกเหนือจากฟิลด์ข้อความชื่อและโปรเจ็กต์อีกสองคอลัมน์โฮสต์และพอร์ตจะถูกเติมด้วยคราสเองหากไม่ทำให้คุณมีค่าเดียวกันตามที่กล่าวไว้ ตรวจสอบภาพหน้าจอเพื่อดูข้อมูลป้อนคำอธิบายภาพที่นี่

ตอนนี้คลิกขวาที่ TomcatServer ในคอนโซลเซิร์ฟเวอร์เลือกเพิ่มและลบจากเมนูบริบท จากกล่องโต้ตอบนี้คุณสามารถเพิ่มโครงการไปยังเซิร์ฟเวอร์ได้

ตอนนี้เรียกใช้เซิร์ฟเวอร์ Tomcat

ป้อนคำอธิบายภาพที่นี่

ตอนนี้เรียกใช้ TomCatDebugConfiguration จาก Debug Tool

ล่าสุดเปิดเบราว์เซอร์ภายในหรือภายนอกและเรียกใช้โครงการของคุณ หากการควบคุมการดำเนินการถึงจุดพักคราสจะพร้อมต์สำหรับมุมมองการดีบัก


47

ในไดเร็กทอรี tomcat bin ที่catalina.batหรือ.shพบ (aka {CATALINA_BASE} / bin) ให้แก้ไข (สร้างหากไม่มี):

setenv.bat/.sh

เพิ่มบรรทัดต่อไปนี้:

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

นั่นคือทั้งหมดที่คุณต้องทำคุณไม่จำเป็นต้องแก้ไขไฟล์catalina.bat(หรือ.sh)

ดูความคิดเห็นในหรือcatalina.batcatalina.sh

คุณอาจต้องปรับไวยากรณ์สำหรับสภาพแวดล้อม / สถานการณ์เฉพาะของคุณ ตัวอย่างเช่นหากคุณได้กำหนด CATALINA_OPTS ไว้แล้วคุณอาจทำสิ่งนี้ (ในสภาพแวดล้อม Windows):

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

ในการดีบักจาก Eclipse:

รัน -> การกำหนดค่าดีบัก ... -> แอปพลิเคชัน Java ระยะไกล -> ใหม่

และระบุชื่อโปรเจ็กต์ที่คุณกำลังดีบักและโฮสต์ tomcat และพอร์ตดีบักที่ระบุข้างต้น


วิธีนี้ใช้งานได้คุณจะต้องตั้งค่า CATALINA_OPTS นี้ใน setenv.sh ซึ่งอยู่ในไดเร็กทอรี tomcat / bin ขอบคุณ.
Amit Kumar

1
ใน setenv.bat ของฉันมันคือ JAVA_OPTS (tomcat 7)
vikingsteve

สวัสดี Philip ได้เพิ่มบันทึกย่อบางอย่างที่อาจช่วยได้ถ้าไม่: คุณใช้ os, tomcat และ eclipse เวอร์ชันใด
karl

ในsetenv.bat ในbinไดเรกทอรีใส่บรรทัดเช่นset JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=nใช้startup.batในการเริ่มต้นคราว
Paramvir ซิงห์ Karwal

33

ในcatalina.batไฟล์โปรดแก้ไขด้านล่าง

  • ขั้นตอนที่ 1: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

  • ขั้นตอนที่ 2: JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

  • ขั้นตอนที่ 3: เรียกใช้ Tomcat จากพรอมต์คำสั่งด้านล่าง: catalina.sh jpda start

  • ขั้นตอนที่ 4: จากนั้นใน eclipse ให้สร้างการกำหนดค่าการดีบัก

    1. ตั้งชื่อสำหรับการกำหนดค่า
    2. ให้project name.
    3. ระบุประเภทการเชื่อมต่อเป็น Standard(Socket Attach)
    4. โฮสต์เป็น localhost
    5. พอร์ตเป็น8000(หรือหมายเลขพอร์ตใด ๆ แต่ควรจะเหมือนกันในที่อื่นด้วย)

ฉันพบ CATALINA_OPTS ในส่วนต่อไปนี้ที่ catalina.bat: doStop shift set ACTION = stop set CATALINA_OPTS = goto execCmd: doConfigTest shift set ACTION = configtest set CATALINA_OPTS = goto execCmd จะแก้ไขได้ที่ไหน คุณสามารถอัปโหลดเนื้อหาของ catalina.bat ได้หรือไม่?
Gopakumar NG

ดูเหมือนว่าคุณกำลังเขียนสิ่งเดียวกันซ้ำสองครั้ง ฉันข้ามขั้นตอนที่ 1 ของคุณ - และมันก็ใช้ได้ คุณยืนยันได้ไหมว่าไม่จำเป็นต้องเปลี่ยน CATALINA_OPTS
Henry Aloni

สำหรับความแตกต่างระหว่างดู CATALINA_OPTS & JPDA_OPTS ดู: stackoverflow.com/questions/11222365/…
Mike R

1
สิ่งนี้จะใช้ไม่ได้ใน Tomcat 8 เพื่อให้มันทำงานใน Tomcat 8 คุณต้องออกจากขั้นตอนที่ 1
Dave

@RAJ. มันใช้งานได้ทั้งหมดใน Tomcat 6 ขอบคุณมาก
T8Z

7

คำตอบข้างต้นหลายคำตอบถูกต้อง แต่จำไว้ว่าโดยค่าเริ่มต้นดีบักเกอร์จะฟังบนlocalhostซึ่งหมายความว่าคุณจะสามารถดีบักได้ก็ต่อเมื่อคุณกำลังเรียกใช้ไคลเอ็นต์การดีบัก (เช่น IDE) บนเครื่องเดียวกัน

หากคุณกำลังดีบักเซิร์ฟเวอร์ระยะไกลคุณจะต้องระบุที่อยู่ IP ที่ถูกต้องบนเซิร์ฟเวอร์นั้นเพื่อรับฟังตัวอย่างเช่น

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

catalina.sh jpda เริ่มต้น

โปรดทราบว่าที่อยู่ตอนนี้คือ10.1.1.33 : 8000

แน่นอนคุณสามารถตรวจสอบว่า IP ใดถูกใช้งานจริงโดยการเรียกใช้

netstat -an

คำสั่งนี้ใช้ได้กับทั้ง windows และ Linux คุณเพียงแค่กรองพอร์ตออกด้วยfind(Windows) หรือgrep(Linux)


ฉันคิดว่าคุณหมายถึงPORTที่ใช้จริงไม่ใช่IPใด
Abdollah

2
ไม่ฉันหมายถึง "ที่อยู่ IP" หากคุณทำการดีบักระยะไกล (จากเครื่องอื่น) คุณจะต้องสามารถระบุที่อยู่ IP ซึ่งแตกต่างจาก localhost หรือ 127.0.0.1 แน่นอนคุณจะต้องมีหมายเลขพอร์ตเสมอ
DAB

5

เพียงแค่เรียกใช้./catalina.sh jpda start(ส้อม) หรือ./catalina.sh jpda run(ไม่แยกไม่ได้กล่าวถึงในความช่วยเหลือ) ตัวเลือกทั้งหมดที่กล่าวถึงที่นี่เริ่มต้นเป็นค่าที่มีเหตุผล


5

ให้ฉันแบ่งปันวิธีง่ายๆในการเปิดใช้งานโหมดดีบักระยะไกลใน tomcat7 ด้วย eclipse (Windows)

ขั้นตอนที่ 1: เปิดไฟล์ bin / startup.bat
ขั้นตอนที่ 2: เพิ่มบรรทัดด้านล่างสำหรับการดีบักด้วยตัวเลือก JDPA (ควรเป็นบรรทัดเริ่มต้นของไฟล์)

    set JPDA_ADDRESS=8000  
    set JPDA_TRANSPORT=dt_socket  

ขั้นตอนที่ 3: ในไฟล์เดียวกัน .. ไปที่ท้ายไฟล์แก้ไขบรรทัดนี้ -

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

ขั้นตอนที่ 4: จากนั้นเรียกใช้ bin> startup.bat (ตอนนี้เซิร์ฟเวอร์ Tomcat ของคุณทำงานในโหมดระยะไกลด้วยพอร์ต 8000)

ขั้นตอนที่ 5: หลังจากนั้นให้เชื่อมต่อโปรเจ็กต์ต้นทางของคุณโดย eclipse IDE กับรีโมตไคลเอ็นต์

ขั้นตอนที่ 6: ใน Eclipse IDE ไปที่ "debug Configuration"

ขั้นตอนที่ 7: คลิก "remote java application" แล้วคลิก "New"

ขั้นตอนที่ 8. ในแท็บ "เชื่อมต่อ" ตั้งค่าพารามิเตอร์

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

ขั้นตอนที่ 9: คลิกใช้และแก้ไขข้อบกพร่อง

ในที่สุดไคลเอนต์ระยะไกล eclipse ของคุณก็เชื่อมต่อกับเซิร์ฟเวอร์ tomcat ที่รันอยู่ (โหมดดีบัก)

หวังว่าแนวทางนี้อาจช่วยคุณได้

ความนับถือ..


4

แก้ไข catalina.bat เพื่อเพิ่ม

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

และ

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

ทางเลือก: เพิ่มบรรทัดด้านล่างเพื่อรันโหมดดีบักตามค่าเริ่มต้นเมื่อคุณเรียกใช้ startup.bat

call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

Eclipse หรือ STS เลือก debug configuration คลิกขวา -> new

connection type -> Standard socket Attach
Port -> 8000 (as given in the CATALINA_OPTS)
Host -> localhost or IP address

ข้อมูลนี้มีไว้สำหรับ WINDOWS แต่ฉันเพิ่งเกิดขึ้นบน windows และมันก็ช่วยฉันได้ ขอบคุณ!
แหวน

2

หากยังไม่ได้ผลทั้งหมดข้างต้นคุณสามารถเพิ่มลงในสคริปต์ได้ตลอดเวลา

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

2

ใน tomcat 7 catalina.sh มีรหัสนี้:

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 หมายความว่าคุณสามารถตั้งค่า JPDA ด้วย:

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

หรือด้วย:

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

และสุดท้ายใช้:

catalina.sh jpda start

ความนับถือ


Tomcat 8: ตัวแปร JPDA_ สามารถตั้งค่าใน setenv.sh ได้โดยไม่จำเป็นต้อง 'ส่งออก' ไม่ว่าในกรณีใดพารามิเตอร์แรกของการเรียกเริ่มต้นจะต้องเป็น "jpda" หากคุณเริ่ม tomcat เป็นบริการที่ดีที่สุดคือแก้ไขสคริปต์ $ {CATALINA_HOME} /bin/startup.sh เพิ่มพารามิเตอร์ "jpda" ในบรรทัดสุดท้ายก่อน "เริ่ม":´´exec "$ PRGDIR" / "$ EXECUTABLE "jpda เริ่มต้น" $ @ "´´
Heri

1

ฉันประสบปัญหานี้ในขณะที่เรียกใช้ Tomcat ภายในคอนเทนเนอร์ Docker ในการแก้ไขปัญหานี้ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มอาร์กิวเมนต์ '-p 8000: 8000' ในคำสั่ง docker run เพื่อแสดงพอร์ตนี้ไปยังเครื่องโลคัลของคุณ แน่นอนคุณจะต้องมีไฟล์ setenv.sh ใน $ {CATALINA_HOME} / bin / ภายในคอนเทนเนอร์ของคุณด้วย


0

การแก้ไข startup.bat ด้วย CATALINA_OPTS AND JPDA_OPTS ไม่ได้ผลสำหรับฉัน แต่การเพิ่มลงใน catalina.bat ทำ

  1. แก้ไข catalina.bat

CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket ที่อยู่ = 8000 เซิร์ฟเวอร์ = y ระงับ = n"

JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, ที่อยู่ = 8000, เซิร์ฟเวอร์ = y, suspend = n"

  1. ปรับเปลี่ยน startup.bat เพื่อรวม jpda

เปลี่ยนการเรียก "% EXECUTABLE%" เริ่ม% CMD_LINE_ARGS% เป็น

เรียก "% EXECUTABLE%" jpda เริ่มต้น% CMD_LINE_ARGS%

จากนั้นกำหนดคอนฟิกแอ็พพลิเคชัน java ระยะไกลในคอนฟิกูเรชันการดีบักของคุณใน Eclipse


0

ก่อนอื่นหากคุณเปิด catalina.bat ด้วยโปรแกรมแก้ไขข้อความคุณจะเห็นว่า: "อย่าตั้งค่าตัวแปรในสคริปต์นี้ ..... " ดังนั้นอย่าเปลี่ยนในสคริปต์นั้น แต่คุณสามารถทำตามขั้นตอนด้านล่างนี้ได้:

  1. ขอแนะนำให้คุณสร้างไฟล์ bat ใหม่ที่มีชื่อ "setenv.bat"
  2. จากนั้นตั้งค่าตัวแปร 2 ตัวในไฟล์ bat นั้นเช่น:

    ตั้งค่า CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket ที่อยู่ = 8000 เซิร์ฟเวอร์ = y ระงับ = n"

    ตั้งค่า JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket ที่อยู่ = 8000 เซิร์ฟเวอร์ = y ระงับ = n"

  3. สุดท้ายเรียกใช้ที่ cmd ว่า: "catalina.bat jpda start"

  4. ใน IDE สร้างคอนฟิกูเรชันการดีบักแบบรีโมตและตั้งค่าโฮสต์เป็น ip เซิร์ฟเวอร์ที่เกี่ยวข้องและพอร์ตเป็น 8000


0

สำหรับรุ่น apache-tomcat-8.5.28 เพียงแค่ทำสิ่งนี้

catalina.bat jpda start

เนื่องจากการตั้งค่าเริ่มต้นได้กำหนดค่าไว้สำหรับเราแล้วใน catalina.bat เป็น

ถ้าไม่ใช่ "% JPDA_OPTS%" == "" goto gotJpdaOpts set JPDA_OPTS = -agentlib: jdwp = transport =% JPDA_TRANSPORT%, address =% JPDA_ADDRESS%, server = y, suspend =% JPDA_SUSPEND%

ดังนั้นไม่จำเป็นต้องมีการกำหนดค่าอื่น ๆ และเมื่อคุณรันคำสั่ง catalina.bat jpda start คุณจะเห็นว่าพอร์ตดีบัก 8000 เปิดอยู่



-2

สำหรับ apache-tomcat-8.5.28

แก้ไขJDPA_OPTSเช่นด้านล่างจากนั้นเรียกใช้catalina.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"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.