Трябва да стартирам Java приложение с обвивкаскрипт, за да го прикачите по-късно (не по принцип, но с това конкретно приложение). Аргументите при стартирането на .jar в скрипта на shell са:
"-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y"
Но тази част работи. Ако ръчно изпълнявам скрипта на shell и изпълнявам конфигурацията за отстраняване на грешки от IntelliJ, всичко работи както трябва. Ако обаче кажа на IntelliJ да изпълни автоматично скрипта на shell, преди да се опита да свърже дебъгер, той не работи. Скриптовият скрипт се изпълнява и портът за отстраняване на грешки е отворен, но дебъгорът не се прикрепя към него.
Това е текущата конфигурация за дебъгера:
Когато го стартирам, мога да видя, че скриптът на shell се изпълнява в конзолата:
Listening for transport dt_socket at address: 8000
Но дебъгерът не се прикрепя.
редактиране:
Разбрах проблема. Скриптовият скрипт блокира, затова IntelliJ не продължава и прикрепя дебъгер. Затова се опитах да го изпълня във фонов режим така:
nohup ./shell_script -debug > /dev/null &
Това работи добре в терминала. Тя незабавно продължава, ако изпълните командата. Ако обаче изпълнявам същата команда от IntelliJ, тя не се изпълнява във фонов режим и продължава да блокира.
Отговори:
0 за отговор № 1Очевидно 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>