3

ErlangWebmachineリソースの書き方を学ぼうとしています。1つのリソースがエラーをスローしますが、追跡できません。クラッシュレポートのエラーメッセージは、十分な情報を提供していません。

Erlangシェルでこれらの関数をテストする方法はありますか?

リソース内のほとんどの関数には、要求パラメーターとコンテキストパラメーターが必要です。しかし、ブラウザでこれらのパラメータをシミュレートする方法がわかりません。

以下のサンプルコード。

ありがとう、

LRP

コード例:

私は特に次のような機能について考えています。

content_types_provided(RD, Ctx) ->
   Path = wrq:disp_path(RD),
   {[{webmachine_util:guess_mime(Path), generate_body}],
   RD, Ctx}.

しかし、私の現在のバグはinit関数にあります。

これは動作します...

ディスパッチルール:

{["blip"], zzz_resource, []}.

初期化:

init([]) -> {ok, undefined}.

to_html(ReqData, State) ->
    % {"<html><bodoy>Hello, new world</body></html>", ReqData, State}.
        {test:test(), ReqData, State}.

しかし、これはエラーをスローします:

急送:

{["static"], static_resource,[]}.

初期化:

init(_) ->
   DocRoot =
       case init:get_argument(doc_root) of
          {ok, [[DR]]} -> DR;
           error -> "doc_root path error"
       end,
   {ok, #ctx{docroot=DocRoot}}.

=ERROR REPORT==== 4-Aug-2011::10:54:56 ===
webmachine error: path="/static"
{error,function_clause,
   [{filename,join,[[]]},
    {static_resource,resource_exists,2},
4

2 に答える 2

2

David が提案したさまざまなテクニックに加えて、 dbgモジュールの使い方も学ぶ必要があります。これは非常に強力で、関数とモジュールをリアルタイムでトレースできます。

例として、特定のケースで、 static_resource module 内のすべての関数をトレースするとします。

..
1> dbg:トレーサ()。
{わかった、}
2> dbg:p(すべて、[c])。
{ok,[{matched,nonode@nohost,25}]}
3> dbg:tp({static_resource, '_', '_'}, [])。
{ok,[{matched,nonode@nohost,5}]}
...

その後、 static_resource モジュールがどこかで呼び出されるたびに、出力 (関数呼び出しのすべての関数パラメーターを含む) が表示されます。

の完全な説明はdbg、この小さな回答スペースの範囲を超えています。O'rielly のErlang Programmingの本をお勧めします。dbg第 17 章には、その使用方法とさまざまなトレース機能に関する非常に優れた記事とチュートリアルがあります。

于 2011-08-05T03:40:19.247 に答える