Erlang中proplists:get_value获取pid返回undefined的排查方法咨询
Erlang proplists:get_value 返回undefined的排查方法
检查键的原子一致性
Erlang原子大小写敏感,确认函数里的pid和列表中的键完全一致,没有写成Pid或其他大小写变体。可以在函数中添加打印验证键的类型:io:format("Key type: ~p~n", [pid]),精准验证Conn的实际结构
io:format("~p", Conn)的输出可能存在视觉误导,比如pid键可能嵌套在子结构中而非顶层。改用更精确的打印方式:io:format("~w~n", [Conn]), % 输出无简化的原始结构 lists:foreach(fun({K, V}) -> io:format("Key: ~p, Value: ~p~n", [K, V]) end, Conn), % 遍历打印每个键值对确认每个顶层键的实际内容。
排查proplists函数是否被覆盖
确保调用的是标准库的proplists:get_value/2,没有自定义同名函数覆盖。在Shell中执行code:which(proplists)查看模块路径,验证是系统自带版本。确认参数传递的正确性
检查调用close_single_connection(Conn, ReqData)时,传入的Conn是否被其他前置逻辑修改过(比如被转换成map或其他非列表结构)。在函数开头添加类型验证:io:format("Conn is list? ~p~n", [is_list(Conn)]),如果Conn不是列表,
proplists:get_value会直接返回undefined。测试极简版函数排除干扰
编写极简测试函数,直接传入Shell中可用的列表,验证逻辑本身是否正常:test_conn_pid() -> List = [{name,<<"127.0.0.1:53290 -> 127.0.0.1:1883">>},{pid,<0.987.0>},{user,<<"guest">>},{type,direct}], proplists:get_value(pid, List).如果该函数能返回正确值,说明问题出在调用上下文的参数传递环节。
内容的提问来源于stack exchange,提问作者Nuwan Sameera
相关产品推荐
相关产品推荐

