Java 在不修改wrapper.conf的情况下启动Mule进行远程调试

Java 在不修改wrapper.conf的情况下启动Mule进行远程调试,java,bash,mule,Java,Bash,Mule,由于工作上的需求,我被Mule版本3.4.0卡住了。我正在编写一个服务脚本来管理Mule的服务生命周期,并且非常希望能够根据参数中是否存在某个选项将其挂起并等待调试器连接 我对Bash和实现这一点很满意,但我在试图让Mule通过测试时遇到了极大的困难 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9989 到底层Java进程,因为它使用自己的(愚蠢的)包装器来处理Java 我正在尝试修改bin/mule脚本,使

由于工作上的需求,我被Mule版本3.4.0卡住了。我正在编写一个服务脚本来管理Mule的服务生命周期,并且非常希望能够根据参数中是否存在某个选项将其挂起并等待调试器连接

我对Bash和实现这一点很满意,但我在试图让Mule通过测试时遇到了极大的困难

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9989
到底层Java进程,因为它使用自己的(愚蠢的)包装器来处理Java

我正在尝试修改
bin/mule
脚本,使其具有一个名为
debug
的模式,该模式将在使用以下命令调用时将上述调试器选项传递给JVM:

bin/mule debug
我目前的工作,这是511行附近的相关部分:

debug() {
    echo "Debugging $APP_LONG_NAME..."
    getpid
    if [ "X$pid" = "X" ]
    then
        # The string passed to eval must handle spaces in paths correctly.
        COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=$APP_NAME wrapper.pidfile=\"$PIDFILE\" $ANCHORPROP $LOCKPROP"
        ######################################################################
        # Customized for Mule
        ######################################################################


        echo "command line: $COMMAND_LINE"
        echo "mule opts: $MULE_OPTS"
        echo "JPDA_OPTS: $JPDA_OPTS"

        eval $COMMAND_LINE $JPDA_OPTS $MULE_OPTS
        ######################################################################
    else
        echo "$APP_LONG_NAME is already running."
        exit 1
    fi
}

我无法升级到Mule的更新版本。我需要找到一种方法来修改此脚本,以便在使用
bin/mule debug
调用时只需等待调试器。我对它进行了足够的修改,进入了我定义的
debug
函数,它基本上是他们自己的
console
函数的副本,用于在控制台模式下启动。我似乎不知道如何将调试选项传递给JVM。有什么想法吗?

以下参数
-debug
,出现在3.4.x中:

./mule -debug

试一试。

当您可以在mule启动并运行后附加调试器时,
-debug
参数非常有用。但是,如果需要调试某些启动代码,则必须取消对conf/wrapper.conf文件中“#debug remotely…”部分后的4个元素的注释。一旦附加了调试器,mule将继续它的启动序列。