崩潰報告(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