Erlang 如何调试rabbitmq ldap代码?

Erlang 如何调试rabbitmq ldap代码?,erlang,rabbitmq,Erlang,Rabbitmq,我正在尝试将openldap用于rabbitmq身份验证。 但是在监视openldap日志时,它总是有错误信息 计划通过替换ebin文件将调试代码插入rabbitmq的源代码中 两个问题: 如何使rabbitmq服务器以shell输入启动,以便可以在线调试。默认情况下,ps-ef show rabbitmq从noshell开始。如何改变它 yus iMac:ebin yuchen$ps-ef | grep erl 501 16021 16014 0周四上午ttys000 48:49.47/usr

我正在尝试将openldap用于rabbitmq身份验证。 但是在监视openldap日志时,它总是有错误信息

计划通过替换ebin文件将调试代码插入rabbitmq的源代码中

两个问题:

如何使rabbitmq服务器以shell输入启动,以便可以在线调试。默认情况下,ps-ef show rabbitmq从noshell开始。如何改变它

yus iMac:ebin yuchen$ps-ef | grep erl

501 16021 16014 0周四上午ttys000 48:49.47/usr/local/ceral/erlang/R16B01/lib/erlang/erts-5.10.2/bin/beam.smp--root/usr/local/ceral/erlang/R16B01/lib/erlang-progname-erl--home/Users/yuchen--newshell-name-emacs 501190975652704:56AM TTYS0060:00.00GREP erl 501 18980 56711 0 4:56AM ttys007 0:04.09/usr/local/ceral/rabbitmq/3.1.5/erts-5.10.2/bin/../erts-5.10.2/bin/beam.smp-W-K true-A30-P 1048576--root/usr/local/ceral/rabbitmq/3.1.5/erts-5.10.2/bin/../-progname erl--home/Users/yuchen--pa/usr/local/ceral/rabbitmq/3.1.5/ebin-noshell-noinput-s rabbit boot-snamerabbit@localhost-boot/usr/local/cillar/rabbitmq/3.1.5/releases/3.1.5/start_sasl-config/usr/local/etc/rabbitmq/rabbitmq-内核inet\u默认连接选项[{nodelay,true}]-兔子tcp_侦听器[{127.0.0.15672}]-sasl errlog_type error-sasl sasl_error_logger false-rabbit error_logger{file,/usr/local/var/log/rabbitmq/rabbit@localhost.log}-rabbit sasl_error_logger{file,/usr/local/var/log/rabbitmq/rabbit@localhost-sasl.log}-rabbit-enabled_-plugins_-file/usr/local/etc/rabbitmq/enabled_-plugins-rabbit-plugins_-dir/usr/local/ceral/rabbitmq/3.1.5/plugins-rabbits-plugins_-expand_-dir/usr/local/var/lib/rabbitmq/mnesia/rabbit@localhost-插件扩展-os\u mon start\u cpu\u sup false-os\u mon start\u disksup false-os\u mon start\u memsup false-mnesia dir/usr/local/var/lib/rabbitmq/mnesia/rabbit@localhost

我已经检查了rabbitmq服务器的启动脚本

exec ${ERL_DIR}erl \
    -pa ${RABBITMQ_EBIN_ROOT} \
    ${RABBITMQ_START_RABBIT} \
    -sname ${RABBITMQ_NODENAME} \
    -boot "${SASL_BOOT_FILE}" \
    ${RABBITMQ_CONFIG_ARG} \
    +W w \
    ${RABBITMQ_SERVER_ERL_ARGS} \
    ${RABBITMQ_LISTEN_ARG} \
    -sasl errlog_type error \
    -sasl sasl_error_logger false \
    -rabbit error_logger '{file,"'${RABBITMQ_LOGS}'"}' \
    -rabbit sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \
    -rabbit enabled_plugins_file "\"$RABBITMQ_ENABLED_PLUGINS_FILE\"" \
    -rabbit plugins_dir "\"$RABBITMQ_PLUGINS_DIR\"" \
    -rabbit plugins_expand_dir "\"$RABBITMQ_PLUGINS_EXPAND_DIR\"" \
    -os_mon start_cpu_sup false \
    -os_mon start_disksup false \
    -os_mon start_memsup false \
    -mnesia dir "\"${RABBITMQ_MNESIA_DIR}\"" \
    ${RABBITMQ_SERVER_START_ARGS} \
    "$@" 
添加以下调试代码

echo "erl dir:" ${ERL_DIR}
echo "pa:" ${RABBITMQ_EBIN_ROOT} 
echo "ebin_root:" ${RABBITMQ_EBIN_ROOT}
echo "boot:" ${SASL_BOOT_FILE}
echo "start rabbit:"  ${RABBITMQ_START_RABBIT}
echo "config_args:" ${RABBITMQ_CONFIG_ARG}
echo "server_erl_args:" ${RABBITMQ_SERVER_ERL_ARGS}
echo "listen_arg:"  ${RABBITMQ_LISTEN_ARG}
调试结果如下:

erl dir: /usr/local/Cellar/rabbitmq/3.1.5/erts-5.10.2/bin/
pa: /usr/local/Cellar/rabbitmq/3.1.5/ebin
ebin_root: /usr/local/Cellar/rabbitmq/3.1.5/ebin
boot: /usr/local/Cellar/rabbitmq/3.1.5/releases/3.1.5/start_sasl
start rabbit: -noinput -s rabbit boot
config_args: -config /usr/local/etc/rabbitmq/rabbitmq
server_erl_args: +K true +A30 +P 1048576 -kernel inet_default_connect_options [{nodelay,true}]
listen_arg: -rabbit tcp_listeners [{"127.0.0.1",5672}]
只有“无输入”,但不存在noshell,ps-ef的输出noshell从何而来

我已经用新的替换了rabbit\u auth\u backend\u ldap.beam。但重启rabbitmq服务器并连接后,调试信息不在rabbitmq日志中。 看来我的新工作不顺利

yus iMac:ebin yuchen$pwd /usr/local/ceral/rabbitmq/3.1.5/plugins/expand/rabbitmq\u auth\u backend\u ldap-3.1.5/ebin

yus iMac:ebin yuchen$ls-li 总数56 20682881-rw-r-r-1 yuchen车轮9648 Apr 6 03:54兔子认证后端ldap.beam 20682882-rw-r-r-1 yuchen wheel 2100 2013年8月15日rabbit_auth_backend_ldap_app.beam 20682883-rw-r-r-1 yuchen车轮1764 2013年8月15日兔子认证后端ldap辅助梁 20682884-rw-r-r-1 yuchen wheel 1928年8月15日2013年8月15日rabbit_auth_backend_ldap_util.beam 20682885-rw-r-r-1 yuchen wheel 994 2013年8月15日rabbitmq_auth_backend_ldap.app

更改的文件部分代码如下,我在模板后添加了111:

log(_Fmt, _Args, #state{log = false}) -> ok;
log( Fmt,  Args, _State)              -> rabbit_log:info(Fmt ++ "~n", Args).

fill(Fmt, Args, State) ->
    ?L2("filling template111 \"~s\" with~n            ~p", [Fmt, Args], State),
    R = rabbit_auth_backend_ldap_util:fill(Fmt, Args),
    ?L2("template result: \"~s\"", [R], State),
    R.
rabbitmq服务器重新启动后,日志不会更改

=INFO REPORT==== 6-Apr-2014::05:25:21 ===
accepting AMQP connection <0.485.0> (127.0.0.1:62003 -> 127.0.0.1:5672)

=INFO REPORT==== 6-Apr-2014::05:25:21 ===
LDAP CHECK: login for equipment_serial_001

=INFO REPORT==== 6-Apr-2014::05:25:21 ===
        LDAP filling template "${username}" with
            [{username,<<"equipment_serial_001">>}]

=INFO REPORT==== 6-Apr-2014::05:25:21 ===
        LDAP template result: "equipment_serial_001"

=INFO REPORT==== 6-Apr-2014::05:25:21 ===
    LDAP bind error: equipment_serial_001 invalidDNSyntax

=INFO REPORT==== 6-Apr-2014::05:25:21 ===
LDAP DECISION: login for equipment_serial_001: {error,invalidDNSyntax}

=ERROR REPORT==== 6-Apr-2014::05:25:24 ===
closing AMQP connection <0.485.0> (127.0.0.1:62003 -> 127.0.0.1:5672):
{handshake_error,starting,0,
                 {amqp_error,access_refused,
                             "PLAIN login refused: rabbit_auth_backend_ldap failed authenticating equipment_serial_001: invalidDNSyntax\n",
                             'connection.start_ok'}}

虽然此错误可能与其他错误有关,但在RabbitMQ 3.3.5上可能导致此错误的一个条件是用户名的密码包含感叹号: