如果在IntelliJ之前运行shell脚本,则调试器不会将自身附加到远程目标

时间:2014-08-27 09:01:00

标签: java debugging intellij-idea

我需要使用shell脚本启动Java应用程序,以便稍后将删除调试器附加到它(通常不是,但是这个特定的应用程序)。在shell脚本中运行.jar时的参数是:

"-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y"

但这一部分正在发挥作用。如果我手动执行shell脚本并从IntelliJ运行调试配置,一切都按预期工作。 但是,如果我告诉IntelliJ在尝试附加调试器之前自动执行shell脚本,则它不起作用。执行shell脚本并且调试端口已打开,但调试器不会将其自身附加到它上面。

这是调试器的运行配置: Debug Configuration

当我运行它时,我可以看到shell脚本在控制台中执行:

Listening for transport dt_socket at address: 8000

但是调试器没有附加。

修改
我解决了这个问题。 shell脚本是阻塞的,因此IntelliJ不会继续并附加调试器。因此我尝试在后台运行它:

nohup ./shell_script -debug > /dev/null &

这在终端中工作正常。如果执行该命令,它会立即继续。但是,如果我从IntelliJ执行相同的命令,它不会在后台运行并继续阻塞。

1 个答案:

答案 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>