无法让Java应用程序侦听端口以进行远程调试?

时间:2017-08-25 23:07:07

标签: java linux debugging spring-boot

我使用 Oracle Java 1.8.0 Ubuntu 14.x 上运行 Spring Boot Java应用,我想远程调试的IntelliJ。我试图让它听一个端口用于调试目的但没有成功。请注意,我尝试的端口都远高于端口1024 ,以确保它不是权限问题。我不是root用户,但我确实有sudo访问该框。

我尝试将其添加到java命令行:

-agentlib:jdwp=transport=dt_socket,address=localhost:9009,server=y,suspend=y

我从这份文件中得到的一种技术:

http://javahowto.blogspot.com/2010/09/java-agentlibjdwp-for-attaching.html

但是,当我运行此命令时:

sudo netstat -an | grep LISTEN

我没有看到端口9009.此外,应用程序不会等待“suspend = y”参数指示的调试器附件,因为我看到应用程序初始化消息流正常,因为应用程序启动。为什么这不起作用?

以下是启动应用程序的shell脚本。请注意,此shell脚本由 supervisord 启动。我指出这一点,以防可能造成任何麻烦:

# !/bin/bash 
# Shell script to launch Spring Boot app

# Kill subprocess when parent bash process is terminated by supervisor or when CTRL+C is received
trap 'kill -TERM $PID' TERM INT


java \
  -Dnetworkaddress.cache.ttl=5 \
  -Dnetworkaddress.cache.negative.ttl=5 \
   \
  -jar spbootapp.jar \
  -agentlib:jdwp=transport=dt_socket,address=localhost:9009,server=y,suspend=y
  --spring.application.name=spbootapp-awsdev \
  --spring.profiles.active=cluster \
  --spring.cloud.config.enabled=false \
  --endpoints.configprops.enabled=false \
  --endpoints.health.sensitive=false \
  &

1 个答案:

答案 0 :(得分:4)

调试参数break需要在命令中的-agentlib:jdwp=transport=dt_socket,address=localhost:9009,server=y,suspend=y之前。