การดีบักโค้ด Scala ด้วย simple-build-tool (sbt) และ IntelliJ


120

วิธีที่ง่ายที่สุดในการดีบักโค้ด Scala ที่จัดการโดย sbt โดยใช้ดีบักเกอร์ในตัวของ IntelliJ คืออะไร เอกสารประกอบจาก"RunningSbt" จากไซต์โค้ด google ของ sbtจะแสดงรายการคำสั่งสำหรับการรันคลาสหลักสำหรับโปรเจ็กต์หรือการทดสอบ แต่ดูเหมือนจะไม่มีคำสั่งสำหรับการดีบัก

คำถามติดตามผล: วิธีที่ง่ายที่สุดในการแนบดีบักเกอร์ของ IntelliJ กับ Jetty เมื่อใช้คำสั่ง jetty-run ของ sbt คืออะไร


6
โปรดอย่าใช้คำถามผสมกันในอนาคต
hennr

คำตอบ:


47

สำหรับการดีบักทั่วไปใน IntelliJ คุณสามารถใช้การกำหนดค่าการรัน / ดีบักของแอปพลิเคชันได้ตามปกติไม่ว่าคุณจะใช้ sbt เพื่อรวบรวมโค้ดของคุณหรือไม่

ในการเชื่อมต่อกับแอปพลิเคชันของคุณที่ทำงานใน Jetty คุณจะต้องสร้างการกำหนดค่าการดีบักระยะไกล เมื่อคุณทำเช่นนั้น IntelliJ จะให้ชุดของอาร์กิวเมนต์บรรทัดคำสั่งสำหรับเรียกใช้ JVM ระยะไกล - บางอย่างเช่น

-Xdebug -Xrunjdwp: transport = dt_socket, เซิร์ฟเวอร์ = y, suspend = n, ที่อยู่ = 5005

SBT jetty-runเปิดตัวกับการขัดแย้งเหล่านี้และจากนั้นดำเนินการ สุดท้ายเปิดการกำหนดค่าการดีบักระยะไกลของคุณใน IntelliJ กระทู้นี้อาจมีประโยชน์


1
สำหรับฉันโดยปกติมันทำงานได้ไม่ดี: stackoverflow.com/questions/16337745/…
ses

พิมพ์นี้ที่ไหน -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
Jwan622

@ Jwan622 เรียกใช้ sbt ด้วยอาร์กิวเมนต์เหล่านั้น (เช่นจากบรรทัดรับคำสั่งโดยจัดหาเป็นอาร์กิวเมนต์บรรทัดคำสั่ง) จากนั้นดำเนินการjetty-runที่พรอมต์ sbt
Aaron Novstrup

แค่วิ่งsbt -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005?
Jwan622

3
สำหรับผู้ใช้ส่วนใหญ่ที่ควรใช้งานได้ แต่ขึ้นอยู่กับวิธีการตั้งค่า sbt ในระบบของคุณ ตามที่ระบุไว้ในคำตอบอื่น ๆ sbt -jvm-debug 5005ที่คุณอาจจะไม่สามารถที่จะเพียงแค่การทำงาน
Aaron Novstrup

189

มีความสะดวกมากเป็น-jvm-debugธงอย่างเป็นทางการในแพคเกจ SBTสำหรับ Mac, Linux และของ Windows คุณสามารถใช้แฟล็กเพื่อระบุพอร์ตการดีบัก:

sbt -jvm-debug 5005

ภายใต้ฝาปิดนี้จะเริ่ม JVM สำหรับ SBT ด้วยคาถาดีบั๊กแบบ verbose ทั่วไป:

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

ตอนนี้คุณสามารถรันโค้ดของคุณได้ตามปกติตัวอย่างเช่นด้วยrunคำสั่งsbt

การกำหนดค่า IntelliJ เพื่อเชื่อมต่อกับโค้ดที่รัน ...

ตอนนี้คุณเชื่อมต่อ IntelliJ กับกระบวนการทำงานของคุณโดยใช้การตั้งค่าการดีบักระยะไกล โปรดทราบว่า 3 ช่องด้านบนในรูปแบบนี้แม้ว่าจะน่ากลัว แต่ก็มีไว้สำหรับคุณในการคัดลอกข้อความออกแทนที่จะเป็นลงใน (พวกเขากำลังให้คาถาดีบั๊กแบบละเอียดที่ระบุไว้ข้างต้นซึ่ง-jvm-debugดูแลคุณอยู่แล้ว) - การกำหนดค่าเดียว คุณสามารถเปลี่ยนแปลงได้ในSettingsส่วนครึ่งล่าง:

การกำหนดค่าการดีบักระยะไกลใน IntelliJ


1
สิ่งนี้ใช้ไม่ได้กับ Windows - มีความคิดอย่างไรกับแพลตฟอร์ม (หมัด) นี้?
javadba

นี้เป็นสคริปต์ปล่อยผมเชื่อว่าจะถูกใช้สำหรับ Windows: github.com/sbt/sbt-launcher-package/blob/master/src/windows/sbt ฉันขอแนะนำให้คุณหาวิธีแก้ไขสคริปต์เพื่อยอมรับ-jvm-debugพารามิเตอร์และส่งเป็นคำขอดึงคุณมีโอกาสที่ดีที่จะได้รับประโยชน์จากทุกคนที่พบว่าตัวเองอยู่บนแพลตฟอร์มเดียวกัน
Roberto Tyley

มองเข้าไปแล้ว สคริปต์เรียกใช้ Windows คือ WAY primitive vs linux ไม่สามารถทำได้แล้ว
javadba

1
รวมคำขอดึง... ดูด้านล่าง
Darren Bishop

3
จะเป็นประโยชน์หากทราบตำแหน่งที่จะแทรก "sbt -jvm 5005" ใน IntelliJ
eddy147

39

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

ติดตั้ง

  1. สร้างคอนฟิกูเรชันการรันสำหรับ sbt jetty-run

    • ไปที่เรียกใช้> แก้ไขการกำหนดค่า
    • คลิกไอคอน [+] แล้วเลือก Scala Compilation Server
    • ป้อนชื่อที่คุณต้องการและคลิกช่องทำเครื่องหมาย "เรียกใช้ SBT Action" และเลือกท่าเทียบเรือ SBT Action จาก [... ]
  2. สร้างคอนฟิกูเรชันการดีบักสำหรับการดีบักแบบรีโมต

    • ไปที่เรียกใช้> แก้ไขการกำหนดค่า
    • คลิกไอคอน [+] แล้วเลือกรีโมท
    • ป้อนชื่อที่คุณต้องการและคัดลอกบรรทัด-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005(อย่าลืมคลิกตกลงเพื่อสร้างการกำหนดค่าจริง)
  3. ตั้งค่าปลั๊กอิน sbt เพื่อเรียกใช้ตัวเลือก vm ด้านบน

    • ไปที่ไฟล์> การตั้งค่า> SBT
    • วางบรรทัด-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005ในกล่องพารามิเตอร์ VM ตามหลังรายการที่มีอยู่แล้ว

DEBUGGING

  1. ตั้งค่าจุดพักตามต้องการ
  2. เริ่มต้นเว็บเซิร์ฟเวอร์ของท่าเทียบเรือโดยเลือกการกำหนดค่าท่าเทียบเรือ sbt ที่คุณสร้างไว้ด้านบนและเลือกเรียกใช้> เรียกใช้หรือคลิกลูกศรสีเขียว
  3. เริ่มตัวดีบักเกอร์ระยะไกลโดยเลือกการกำหนดค่าการดีบักระยะไกลที่คุณสร้างไว้ด้านบนและเลือกเรียกใช้> ดีบักหรือคลิกที่ไอคอนข้อบกพร่อง

16
ไม่มี Scala Compilation Server ในเมนู Configurations ฉันต้องการอะไรเป็นพิเศษหรือไม่?
Arne

ดูเหมือนว่าไม่จำเป็นต้องใช้ step1 สิ่งที่ฉันทำคือรันคำสั่ง sbt sbt -jvm-debug 5005 consoleจากนั้นตั้งค่าเบรกพอยต์ใน intelllJ Idea เรียกใช้ debug
Pengfei.X

@ Pengfei.X sbt -jvm-debug 5005 consoleไม่ได้ผลสำหรับฉัน แต่sbt -jvm-debug 5005ทำ
Lukasz Czerwinski

8

สิ่งนี้ใช้ได้กับฉันทุกครั้งและสิ่งเดียวที่คุณต้องตั้งค่าคือการดีบักระยะไกลใน IntelliJ ฉันเริ่ม SBT ด้วยพารามิเตอร์ JVM จากเทอร์มินัลใน IntelliJ:

sbt -J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

หลังจากนั้นฉันสามารถเริ่มการดีบักระยะไกลบน localhost: 5005


7

ฉันกำลังเพิ่มคำตอบอื่นที่นี่เพราะฉันพบคำถามนี้เมื่อค้นหาปัญหาที่เกี่ยวข้อง: การดีบักคลาสทดสอบโดยใช้เบรกพอยต์

ฉันใช้ ScalaTest และฉันมักจะเรียกใช้ชุดโปรแกรมโดยใช้คำสั่ง 'test-only' ของ sbt ตอนนี้เมื่อฉันต้องการใช้ดีบักเกอร์แบบโต้ตอบฉันสามารถทำสิ่งต่อไปนี้:

สร้างการกำหนดค่า Run / Debug ใหม่ประเภท 'ScalaTest' ใส่ชื่อ "Test Class:" หลักแล้วเลือก "ก่อนเปิดตัว: เรียกใช้ SBT Action 'test-compile'" เพียงเท่านี้คุณก็สามารถวางเบรกพอยต์ในแหล่งทดสอบแล้วเรียกใช้การกำหนดค่านี้ได้


เหมือนกัน แต่ทำงานได้ไม่ดี: stackoverflow.com/questions/16337745/…
ses

คุณรู้หรือไม่ว่าฉันจะเรียกใช้การทดสอบเพียงครั้งเดียวได้อย่างไรหากชั้นทดสอบมีการทดสอบหลายแบบ คุณช่วยดูคำถามต่อไปนี้ได้
มนู

7

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

รวมถึงความเข้าใจภูมิหลังที่ฉันไม่มีเมื่อเริ่ม ...

นี่เป็นไปตามคำแนะนำส่วนใหญ่ที่นี่พร้อมกับคำอธิบายเพิ่มเติมที่นำฉันผ่านมันไป

สภาพแวดล้อมของฉัน: Scala 2.10.2, SBT 0.13 และ IntelliJ 13.1

พื้นหลัง:

  • ไม่ว่าจะด้วยเหตุผลใดก็ตามการใช้ SBT เพื่อรวบรวม Scala ใน IntelliJ ไม่ได้รวมเข้ากับโครงการ Maven (ซึ่งช่วยให้การดีบักทำได้ง่ายมาก)
  • จากความเข้าใจของฉันดูเหมือนว่าเมื่อคอมไพล์ด้วย SBT คุณกำลังรวบรวมในกระบวนการแยกต่างหากดังนั้นคุณต้องทำการดีบักจากระยะไกล

Debugging คืออะไร?

  • การดีบักเป็นโหมดที่คุณสามารถเรียกใช้ JVM หรือแอปที่ช่วยให้คุณควบคุมขั้นตอนการเรียกใช้โค้ดได้
  • จากนั้นเครื่องมือดีบักที่คุณใช้จะสามารถออกคำสั่งไปยัง Debugging Engine ที่บอกให้ "รันโค้ดบรรทัดถัดไปจากนั้นหยุดอีกครั้ง" หรือ "ดำเนินการต่อ" หรือ "รับค่าของตัวแปรที่เก็บไว้ที่นี่ในหน่วยความจำ"

Remote Debugging คืออะไร?

  • Remote Debugging กำลังดีบักผ่านการเชื่อมต่อเครือข่าย (ซ็อกเก็ต)
  • การเชื่อมต่อเครือข่ายนี้ช่วยให้คุณออกคำสั่งไปยัง Debug Engine จากเครื่องระยะไกล
  • สิ่งนี้มีประโยชน์เมื่อคุณต้องการดีบักโค้ดที่ทำงานบนเซิร์ฟเวอร์ระยะไกล แต่
  • นอกจากนี้ยังมีประโยชน์สำหรับสถานการณ์เช่นโค้ด Scala ที่ทำงานภายใต้ SBT และเปิดตัวผ่านเว็บเซิร์ฟเวอร์เช่น Jetty หรือ Tomcat แยกจากสภาพแวดล้อม IntelliJ ของคุณ

การอ้างอิงลิงค์ด้านบนคำอธิบาย / การปรับเปลี่ยนต่อไปนี้มีประโยชน์:

  1. ตั้งค่า IntelliJ เพื่อเปิด SBT ด้วยการตั้งค่า JVM "เปิดใช้งานการดีบัก" รวมถึงพอร์ตที่จะใช้เมื่อตั้งค่าซ็อกเก็ตเครือข่าย (ไม่เปลี่ยนแปลง) เพิ่มพารามิเตอร์ VM ที่มีชื่อในการตั้งค่า IntelliJ ของคุณ
  2. ตรวจสอบว่าหมายเลขพอร์ตของคุณตรงกับการตั้งค่า JVM จากขั้นตอนที่ 1
  3. เมื่อคุณเปิด SBT คุณต้องทำจากปลั๊กอิน SBT Console (ซึ่งเป็นสิ่งที่คุณกำหนดค่าในขั้นตอนที่ 1) หากคุณใช้งาน SBT นอก IntelliJ (ที่บรรทัดคำสั่ง) คุณจะต้องเปิด SBT ด้วยพารามิเตอร์ VM เดียวกันจากขั้นตอนที่ 1 (ฉันไม่ได้ทำสิ่งนี้จึงไม่มีคำแนะนำ) หลังจากขั้นตอนนี้ SBT กำลังทำงานอยู่ (แต่รหัสของคุณยังไม่ได้) และ JVM ได้รับการตั้งค่าสำหรับ Remote Debugging
  4. สิ่งนี้เริ่มต้น IntelliJ Debugging Tool ซึ่งเชื่อมต่อกับ JVM ที่คุณเริ่มในขั้นตอนที่ 3
  5. สุดท้ายคุณเริ่มการคอมไพล์ใน SBT Console คุณสามารถทำได้ด้วยคำสั่งคอมไพล์ใด ๆ รวมถึงคำสั่งคอมไพล์ต่อเนื่อง หากคอมไพล์ซ้ำอย่างต่อเนื่องการคอมไพล์ซ้ำจะเกิดขึ้น แต่ไม่ใช่ในขณะที่การเรียกใช้โค้ดถูกหยุดชั่วคราวโดยดีบักเกอร์

4
ลิงก์เสีย
Andrew Bucknell

4

ฉันกำลังดิ้นรนกับการดีบักบน Windows ด้วยแอป Spray-can / Akka / Scala ที่สร้างผ่าน SBT โดยใช้ Intellij การรวบรวมคำแนะนำต่างๆเข้าด้วยกันวิธีที่ง่ายที่สุดสำหรับฉันคือ:

  1. ตรวจสอบให้แน่ใจว่าคุณมี sbt.Revolver ในไฟล์ project / plugsin.sbt ของคุณเช่น

    addSbtPlugin ("io.spray"% "sbt-revolver"% "0.7.1")

  2. ตั้งค่า javaoptions ในไฟล์ build.sbt ของคุณ:

    javaOptions: = Seq ("- Xdebug", "-Xrunjdwp: transport = dt_socket, เซิร์ฟเวอร์ = y, suspend = y, ที่อยู่ = 5005")

โดยเฉพาะอย่างยิ่งใช้ตัวเลือก Suspend = y สิ่งนี้จะถือแอปไว้จนกว่าคุณจะเชื่อมต่อตัวดีบั๊กระยะไกลจาก Intellij

  1. ตั้งค่าการกำหนดค่าดีบักเกอร์ใน Intellij ผ่านเมนู Run / Edit Configurations กดปุ่ม + เลือกตัวเลือก "รีโมท" ตรวจสอบให้แน่ใจว่ารายการตรงกับ javaoptions ด้านบนโดยเฉพาะที่อยู่พอร์ต 5005 ตั้งชื่อ config เป็น 'Spray'

  2. จากคอนโซล SBT ของคุณให้ใช้คำสั่งเริ่มต้นใหม่ คุณควรเห็นที่อยู่พอร์ต 5005 ในเอาต์พุตข้อเสนอแนะ

  3. ใน Intellij ตั้งค่าจุดพักของคุณ

  4. จาก Intellij เลือก Run \ Debug 'Spray' สิ่งนี้ควรเชื่อมต่อกับเว็บเซิร์ฟเวอร์สเปรย์กระป๋อง คุณควรจะเห็นเธรดจำนวนมากในหน้าต่างแก้ไขข้อบกพร่อง

  5. ระวังว่าคำสั่ง Get ใน Spray บางส่วนดูเหมือนจะดำเนินการเมื่อเริ่มต้นใช้งาน แต่ไม่ได้เรียกใช้เว็บไซต์ซ้ำ ๆ


อวยพรคุณสำหรับคำตอบนี้! ทำงานอย่างมีเสน่ห์
user2770362


3

สำหรับสิ่งที่ควรค่าแก่ชาว Windows ให้แก้ไข%SBT_HOME%\bin\sbt.batและค้นหาบรรทัดรหัสต่อไปนี้:

:run

"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*
if ERRORLEVEL 1 goto error
goto end

จากนั้นแทนที่ด้วยรหัสนี้:

FOR %%a IN (%*) DO (
  if "%%a" == "-jvm-debug" (
    set JVM_DEBUG=true
    set /a JVM_DEBUG_PORT=5005 2>nul >nul
  ) else if "!JVM_DEBUG!" == "true" (
    set /a JVM_DEBUG_PORT=%%a 2>nul >nul
    if not "%%a" == "!JVM_DEBUG_PORT!" (
      set SBT_ARGS=!SBT_ARGS! %%a
    )
  ) else (
    set SBT_ARGS=!SBT_ARGS! %%a
  )
)

if defined JVM_DEBUG_PORT (
  set _JAVA_OPTS=!_JAVA_OPTS! -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=!JVM_DEBUG_PORT!
)

call :run %SBT_ARGS%

if ERRORLEVEL 1 goto error
goto end

:run
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*
goto :eof

ดีที่สุดที่ฉันสามารถทำได้เพื่อให้ได้พฤติกรรมเดียวกัน-jvm-debugเมื่อเห็นในตัวเรียกใช้สคริปต์ Bash

NB ฉันไม่คิดว่า%SBT_HOME%มีอยู่จริงนอกสคริปต์นี้เว้นแต่คุณจะสร้างขึ้นอย่างชัดเจนในสภาพแวดล้อมของคุณ แต่อย่างไรก็ตามคุณจะได้รับประเด็น: D



3

ไฟล์ -> การตั้งค่า -> การตั้งค่าอื่น ๆ -> พารามิเตอร์ SBT VM -Xmx512M -XX: MaxPermSize = 256M -Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = n, address = 5005

Run-> Edit Configurations กด + จากนั้นเลือก remote กด Apply

ตอนนี้ในคอนโซล SBT (เริ่มต้นภายในโดย intelliJ) เมื่อคุณรันคำสั่ง 'run' คุณจะเห็น "Listening for transport dt_socket at address: 5005"

ตอนนี้กด Run-> Debug คุณจะเห็นเมนูดีบักด้านล่างเปิดใช้งาน มีสองแท็บ Debugger และ Console

ใช้ F7 จากบรรทัดถัดไปไปยังถัดไป

ฉันเลือก Suspend เป็น n ด้วยความที่มันเป็น y เมื่อฉันรันคำสั่ง run มันก็ค้าง



0

ฉันก็พบปัญหาเดียวกันฉันต้องการแบ่งปันวิธีที่ฉันแก้ไข โดยวิธีการที่ฉันใช้ Ubuntu 14.04 และ IntelliJ 15

  1. ในการตั้งค่า -> SBT -> วางบรรทัดด้านล่างในกล่องข้อความพารามิเตอร์ VM:

    -XX: MaxPermSize = 384M -Xdebug -Xrunjdwp: transport = dt_socket, เซิร์ฟเวอร์ = y, suspend = n, ที่อยู่ = 5005

  2. เปิด Termilal ใน IntelliJ แล้วรัน:

    sbt -jvm-debug 5005

    หมายเหตุ:คุณควรเห็นบรรทัดนี้ในเทอร์มินัล: "Listening for transport dt_socket at address: 5005"

  3. แก้ไขการกำหนดค่า -> คลิก + -> เลือก 'รีโมท'

    I. Give some name example: DebugMyModule
    
    II. All needed configurations will be set automatically, But you just verify. In Command line arguments should look like this "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005".
    
    III. In 'Search Sources in Module's Classpath' text box specify your module in which module your test cases are there.
    
    IV. put 127.0.0.1 host instead of 'localhost'. 'localhost' not working for me.
  4. เลือกDebugMyModuleในEdit Configurationsกล่องรายการและคลิกตรวจแก้จุดบกพร่อง

    หมายเหตุ:คุณควรเห็น Debug View เปิดอยู่และใน Debug Console คุณควรจะเห็น "Connected to the target VM, address '127.0.0.1:5005':, transport: 'socket'"

  5. ใส่เบรกพอยต์ในกรณีทดสอบสองสามกรณีในคลาสทดสอบของคุณ

  6. มาที่ Terminal ที่คุณวิ่ง " sbt -jvm-debug 5005" แล้ววิ่งตามด้านล่าง

    project <your-module-name>
    it:testOnly package.TestSpec

    ตัวอย่างเช่น com.myproject.module.AddServiceTest [Spec]

  7. คุณสามารถดูการดีบักเริ่มต้นได้ในเบรกพอยต์กรณีทดสอบของคุณ


ใช้ไม่ได้กับ Ubuntu 16.04 และ IntelliJ 2017.3 ตัวดีบักเกอร์จะเชื่อมต่อ แต่เบรกพอยต์จะถูกละเว้น
Jonathan Neufeld

testSuite ไม่สามารถหยุดที่เบรกพอยต์ได้อย่างไรก็ตามหากเบรกพอยต์อยู่ในวิธีการหลักก็สามารถทำได้
shengshan zhang

0

ปลั๊กอินAttachMe IntelliJ เป็นวิธีที่เร็วกว่าในการติดดีบักเกอร์โดยไม่ต้องกรอกหมายเลขพอร์ต:

AttachMe จะแนบดีบักเกอร์ IntelliJ โดยอัตโนมัติแม้ว่าคุณจะเริ่มแอปจากเทอร์มินัล (หรือวิธีอื่นใดก็ตาม) คุณไม่จำเป็นต้องทริกเกอร์Attach to processการดำเนินการด้วยตนเอง

โพสต์บล็อกและreadmeมีคำแนะนำในการตั้งค่า แต่ฉันต้องแก้ไขเล็กน้อยเพื่อให้มันทำงานบนเครื่องของฉัน

  1. ดาวน์โหลดinstaller.shสคริปต์จาก repo อย่างเป็นทางการ

    curl -o installer.shhttps://raw.githubusercontent.com/JetBrains/attachme/master/installer.sh
  2. ให้สิทธิ์ดำเนินการ chmod u+x installer.sh
  3. เรียกใช้ด้วย ./installer.sh
  4. สิ่งนี้ควรติดตั้งตัวแทนภายใต้/.config/attachme/agent.jarและสร้าง~/.attachmeไฟล์
  5. แก้ไข~/.attachmeให้มี

    AM_JDWP_ARGS="transport=dt_socket,server=y,suspend=y,address=127.0.0.1:0"
    echo Using JDWP arguments ${AM_JDWP_ARGS}
    export JAVA_TOOL_OPTIONS="- javaagent:/Users/mario_galic/.config/attachme/agent.jar -agentlib:jdwp=${AM_JDWP_ARGS}"
    echo "AttachMe configured successfully"
  6. ติดตั้งปลั๊กอิน Attachme ที่เกี่ยวข้องและรีสตาร์ท: IntelliJ | Preferences | Plugins

  7. สร้างAttachmeการกำหนดค่าการรัน:Run | Edit configurations... | Add new configuration | Attachme debugger registry | OK

หลังจาก shenanigans เพียงครั้งเดียวเราสามารถแนบดีบักเกอร์โดยอัตโนมัติโดย

  1. เริ่มAttachmeรันการกำหนดค่า
  2. source ~/.attachme
  3. เริ่มแอปพลิเคชันจากเทอร์มินัลบางที sbt "runMain example.Hello"
  4. ตัวแก้ไขข้อบกพร่องควรแนบและหยุดโดยอัตโนมัติที่จุดพักใด ๆ

-1

ตามคำตอบของ Roberto Tyley ข้างต้น แต่ใน Windows เราจำเป็นต้องตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้หลังจากติดตั้ง sbt:

SBT_HOME
C: \ Program Files (x86) \ sbt \
[หรือที่ใดก็ตามที่ติดตั้ง sbt]

SBT_OPTS
-Xdebug -runjdwp: transport = dt_socket, เซิร์ฟเวอร์ = y, ระงับ = n, ที่อยู่ = 5005

[ต่อตัวอย่าง IntelliJ ของ RT]

เพิ่มในเส้นทาง:% SBT_HOME% \ bin;% SBT_OPTS%

จากนั้นเรียกใช้สิ่งต่อไปนี้ในบรรทัดคำสั่งภายในโฟลเดอร์โครงการ "sbt run -jvm -debug 5005"

หากทำงานได้อย่างถูกต้องในขั้นต้นบรรทัดคำสั่งจะแสดงบรรทัด "Listening for transport dt_socket at address: 5005"

ตั้งค่าเบรกพอยต์ใน IntelliJ

เปิดเว็บไซต์ในเบราว์เซอร์เพื่อทริกเกอร์เบรกพอยต์ของดีบักเกอร์เช่น " http: // localhost: 9000 / "

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