erlang io:格式和悬挂的Web应用程序

时间:2010-03-26 12:42:53

标签: erlang

虽然我正在学习一门新语言,但我通常会选择大量愚蠢的println来查看特定时间的值。它通常就足够了,因为语言通常具有等效的tostring。在使用erlang尝试相同的方法时,当尝试打印的值不是列表时,我的webapp就会“挂起”。当打印的变量是元组而不是列表时,会发生这种情况。没有错误,例外,没有......只是没有回应。现在,我正在通过小心我正在写的内容而糊涂,随着我学到更多,事情变得越来越好。但我想知道,有没有办法更可靠地[盲目]将值打印到标准输出? 谢谢,

- 添

3 个答案:

答案 0 :(得分:20)

在Erlang中,与其他语言一样,您可以打印变量,无论它们是列表,元组还是其他任何内容。

我的感觉是,对于打印,你正在做的事情(只是一个猜测):

io:format("The value is: ~p.", A).

这是错误的,因为你应该传递一个参数列表:

io:format("The value is: ~p.", [A]).

A可以是任何东西。

我通常觉得使用起来很舒服:

erlang:display/1

打印变量。

此外,跟踪函数通常是调试应用程序的更好方法,而不是使用打印输出。请参阅:

http://aloiroberto.wordpress.com/2009/02/23/tracing-erlang-functions/

答案 1 :(得分:2)

在开发网络应用时,我使用error_logger module 我通常会定义一些这样的宏

-ifdef(debug).
-define(idbg(FmtStr, Err), 
        error_logger:info_msg("~p (line ~p): " FmtStr "~n", 
                              [?MODULE, ?LINE | Err])).
-define(rdbg(Term), error_logger:info_report(Term)).
-else.
-define(idbg(_FmtStr, _Err), void).
-define(rdbg(_Term), void).
-endif.

您可以使用以下内容调用宏:

code...
?rdbg(ErlangTerm),
other code...

在开发期间,您可以使用以下命令编译模块:

erlc -Ddebug *.erl

因此您可以在erlang控制台中获取信息消息。

答案 2 :(得分:0)

同时确保没有没有链接的终止进程,这可能导致其他进程等待某些事情而不是超时 - 因此奇怪的悬挂部分。

相关问题