0

私はかなり大規模なプロジェクトで erlang 5.8.1.1 で eclipse 3.6.2 を使用しているため、より新しいバージョンの言語に移行する準備ができていないため、eprof のバグに悩まされています。

string_bp_mfa([{Mfa, {Count, Time}}|Mfas], Tus, {MfaW, CountW, PercW, TimeW, TpCW}, Strings) ->
    Smfa   = s(Mfa),
    Scount = s(Count),
    Stime  = s(Time),
    Sperc  = s("~.2f", [100*(Time/Tus)]),
    Stpc   = s("~.2f", [Time/Count]),

    string_bp_mfa(Mfas, Tus, {
        erlang:max(MfaW,  length(Smfa)),
        erlang:max(CountW,length(Scount)),
        erlang:max(PercW, length(Sperc)),
        erlang:max(TimeW, length(Stime)),
        erlang:max(TpCW,  length(Stpc))
        }, [[Smfa, Scount, Sperc, Stime, Stpc] | Strings]).

これを書いた人はゼロ除算を防げなかったので、いつもクラッシュします。私は変更をハッキングしました:

SafeTus = case Tus of 0 -> 1; _ -> Tus end,
SafeCount = case Count of 0 -> 1; _ -> Count end,
Sperc  = s("~.2f", [100*(Time/SafeTus)]),
Stpc   = s("~.2f", [Time/SafeCount]),

...しかし、私のプロジェクトでは決して実行されません。.erl を手動で再コンパイルし、.beam を ebin ディレクトリに配置しましたが、プロジェクトを完全にシャットダウンし、Eclipse を閉じ、Eclipse を開き、更新、クリーニング、および再起動した後、メソッドの新しいバージョンは実行されません。「foo + 1」のような式をメソッドに貼り付けて、現在ダウンしているバダリスとは異なる例外が発生するかどうかを確認しましたが、効果はありませんでした。

.beams が統合されているか、どこかにキャッシュされていると推測できますが、それを再構築する必要があります。

4

1 に答える 1

0

codeコード パス検索について説明しているモジュールのドキュメントを参照してください。eprofはアプリケーション内にあるためtools、追加のライブラリ ディレクトリから取得する必要があります。

于 2011-09-27T21:32:25.827 に答える