崩溃报告(SASL)给出了或多或少的错误发生的位置和原因。 但是有可能对此进行细化(函数,行代码等)?如何优化调试?
Q
如何优化调试?
2
A
回答
2
如果您可以重现故障,获取更多信息的最佳方式是在有问题的部分上放置dbg跟踪并查看该输出。
dbg:tracer(),dbg:p(all,c),dbg:tpl(Mod,Func,x).
这通常对我来说是诀窍。用你想调试的任何模块和函数替换Mod和Func。
如果您正在寻找更详细的验尸日志,那么sasl和error_logger是您的朋友。当然有些时候SASL没有给你足够的信息,如果你的系统中发生了这么多事情,你可能应该学会更好地理解SASL输出或者编写你自己的日志处理程序。将自己的错误处理程序插入SASL并根据需要输出内容很容易。
但是,您将永远不会收到行号,因为该信息在编译时被销毁,虚拟机无法知道哪条行崩溃。但它确实知道哪个函数以及哪些参数可能与哪些参数相关,因此通常可以找出问题出在哪里。除非你编写很长的函数,哪个IMO是不好的代码味道,并且你应该将代码重构为更小的函数。
2
一般来说,没有。 erlang .beam文件不包含原始代码的行号,因此很难知道问题发生在哪一行。我确实有许多宏我在项目中使用,包括为"log.hrl"
:
-define(INFO(T), error_logger:info_report(T)).
-define(WARN(T), error_logger:warning_report(
[process_info(self(), current_function), {line, ?LINE} | T])).
-define(ERR(T), error_logger:error_report(
[process_info(self(), current_function), {line, ?LINE} | T])).
-define(DEBUG(Format, Args), io:format("D(~p:~p:~p) : "++Format++"~n",
[self(),?MODULE,?LINE]++Args)).
-define(DEBUGP(Args), io:format("D(~p:~p:~p) : ~p~n",
[self(),?MODULE,?LINE, Args])).
,这确实让你在程序中去寻找一些日志行。为了调试我也经常从EPER套件使用红虫工具:
https://github.com/massemanet/eper
它可以让你实时跟踪每当调用发生:
Eshell V5.8.3 (abort with ^G)
1> redbug:start("erlang:now() -> stack;return", [{time, 60*1000}]).
ok
2> erlang:now().
{1297,183814,756227}
17:50:14 <{erlang,apply,2}> {erlang,now,[]}
shell:eval_loop/3
shell:eval_exprs/7
shell:exprs/7
17:50:14 <{erlang,apply,2}> {erlang,now,0} -> {1297,183814,756227}
3>
我希望这有助于。
相关问题
- 1. 如何优化/调试nonperformant javascript代码
- 2. 函数的调试优化
- 3. 爪哇 - 调试和优化
- 4. 如何优化调试DLL以最小化VC6中的调试检查?
- 5. GNU GCC编译器优化和调试
- 6. 调试期间的编译器优化
- 7. 使用帧指针优化调试
- 8. SQL查询优化和调试
- 9. 调试模式下的优化
- 10. SQL查询优化和调试
- 11. 发布,调试和优化标志
- 12. 如何调试性能问题/优化您的流星应用
- 13. 如何在调试配置中启用ARC优化器?
- 14. 如何禁用Eclipse CDT的调试优化
- 15. 如何在调试Linux内核时避免“优化出”
- 16. 如何在使用log4net.async时优化log4net调试?
- 17. 如何优化子&instring或替代功能用于调试
- 18. 如何优化TestNG的和seleniums测试
- 19. PLSQL脚本优化/调优
- 20. 如何优化Shell32方法调用?
- 21. 如何优化REST API调用
- 22. 如何调用PHP psliwa图像优化
- 23. 如何优化async.js API调用?
- 24. 如何优化
- 25. 如何优化?
- 26. 如何优化
- 27. 如何优化
- 28. 如何优化?
- 29. 优化jQuery回调
- 30. 优化Ajax调用
如果崩溃报告给出了错误发生的位置和原因,那将会很好。不幸的是,他们给你的地方,为什么它坠毁,有时没有什么可以做的地方,为什么发生了错误:( – 2011-02-08 15:15:26
可以提供我们的示例崩溃报告? – 2011-02-08 16:00:49