【问题标题】:Can't get Java app to listen on port for remote debugging purposes?无法让 Java 应用程序监听端口以进行远程调试?
【发布时间】:2018-02-04 00:52:09
【问题描述】:

我有一个使用 Oracle Java 1.8.0Ubuntu 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 \
  &

【问题讨论】:

  • 尝试-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9009 代替您当前的调试参数,看看是否有帮助。编辑:参数也需要在-jar之前,这很可能是你的问题。
  • @kon 无需尝试旧式命令行。您建议重新定位参数解决了它。请将您的评论变成答案,以便我接受。谢谢!
  • 完成了,没想到那是旧样式

标签: java linux debugging spring-boot


【解决方案1】:

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

【讨论】:

  • 非常感谢。出于某种原因,所有门户都将此参数放在最后。
  • @Sergey 很高兴它有帮助
猜你喜欢
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 2018-05-11
  • 2011-10-08
  • 2018-03-27
相关资源
最近更新 更多