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

标签 java linux debugging spring-boot

我有一个 Spring Boot Java 应用程序Ubuntu 14.x 上运行,使用 Oracle Java 1.8.0 我想用它进行远程调试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 \
  &

最佳答案

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

关于java - 无法让 Java 应用程序监听端口以进行远程调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45890416/

相关文章:

java - 导入 com.zaxxer.hikari.HikariConfig,无法解析符号,IntelliJ

java - 灵活的锁定替代方案(选择性锁定)

linux - 如何调整NAPI的轮询周期?

linux - 在 Mac OS X 的命令行参数中,vmd 不使用文件名打开

linux - 逐行专门调试

java - 使用GSON解析JSON文件

java - 如何在主屏幕中显示警报对话框?

mysql - mysql 查询下的 Bash 变量

javascript - 是什么导致我的 AI 在 map 上找到随机点而不选择真正的目标?

visual-studio-2010 - 更轻松地将调试器附加到 ASP.NET 应用程序