我在一个相当大的项目上使用 eclipse 3.6.2 和 erlang 5.8.1.1,我们还没有准备好迁移到更现代的语言版本,所以我在 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”之类的表达式,以查看我是否得到与现在让我失望的 badarith 不同的异常,但没有效果。
我只能猜测 .beams 正在被合并或缓存在我将不得不进行核攻击或重建的某个地方?