私はかなり大規模なプロジェクトで 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 が統合されているか、どこかにキャッシュされていると推測できますが、それを再構築する必要があります。