我需要使用shell脚本启动Java应用程序,以便稍后将删除调试器附加到它(通常不是,但是这个特定的应用程序)。在shell脚本中运行.jar时的参数是:
"-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y"
但这一部分正在发挥作用。如果我手动执行shell脚本并从IntelliJ运行调试配置,一切都按预期工作。 但是,如果我告诉IntelliJ在尝试附加调试器之前自动执行shell脚本,则它不起作用。执行shell脚本并且调试端口已打开,但调试器不会将其自身附加到它上面。
这是调试器的运行配置:
当我运行它时,我可以看到shell脚本在控制台中执行:
Listening for transport dt_socket at address: 8000
但是调试器没有附加。
修改
我解决了这个问题。 shell脚本是阻塞的,因此IntelliJ不会继续并附加调试器。因此我尝试在后台运行它:
nohup ./shell_script -debug > /dev/null &
这在终端中工作正常。如果执行该命令,它会立即继续。但是,如果我从IntelliJ执行相同的命令,它不会在后台运行并继续阻塞。
答案 0 :(得分:0)
显然,Ant在执行阻塞的shell脚本时能够生成一个新进程。因此,我能够使用非阻塞的Ant目标启动应用程序。
<target name="run" depends="clean,install-release">
<exec executable="pkill" spawn="false">
<arg line="-f application_name"/>
</exec>
<exec executable="bash" spawn="true">
<arg line="${target}/install/some.sh -debug"/>
</exec>
</target>