我正在用Scala編寫的一個使用SBT將它構建到JAR文件中的API。我將JAR文件部署到虛擬機(VM),我可以成功執行它 - API啓動並處理請求。從Scala源代碼組裝起來的遠程調試JAR
現在我試圖使用IntelliJ(v 2016.3.4)遠程調試配置在源代碼Scala代碼中放置斷點。以下是我所做的:
1)在IntelliJ中打開我的源代碼作爲Scala SBT項目。
2)打開VM端口5005
3)VM執行的JAR:
java -noverify "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" -cp /home/vagrant/shared/build/geotrellis-chatta-demo-assembly-0.1-SNAPSHOT.jar geotrellis.chatta.Main
我得到這樣的輸出:
Listening for transport dt_socket at address: 5005
4)中的IntelliJ增加了一個遠程調試配置並開始它。 IntelliJ控制檯告訴我這個:
Connected to the target VM, address: 'localhost:5005', transport: 'socket'
但是,我的斷點都沒有工作。
我錯過了上述步驟中的某些內容嗎?我對Scala非常陌生,多年來一直沒有認真對待Java,並且剛剛開始使用IntelliJ。
UPDATE:IntelliJ調試器肯定是在工作 - 如果我暫停它,API將停止響應請求,直到它變爲未暫停。但是在斷點上沒有停止。
包含調試信息的jar是否包含在內?沒有行號就不能設置斷點。 [這篇文章]的答案(http://stackoverflow.com/questions/1508235/determine-whether-class-file-was-compiled-with-debug-info)有一些信息來解決這個問題。 – jkinkead
考慮使用方法斷點。 –
您是否爲正在調試的JAR指定了源代碼附件?在IntelliJ中,找到JAR並將其與源代碼 – radumanolescu