오류보고 (SASL)는 버그가 발생하는 위치와 이유를 제공합니다. 하지만이 기능 (함수, 라인 코드 등)을 수정하는 것이 가능합니까?디버깅을 구체화하는 방법은 무엇입니까?
답변
오류를 재현 할 수있는 경우 추가 정보를 얻는 가장 좋은 방법은 해당 섹션에 dbg 추적을 넣고 그 결과를 검토하는 것입니다.
dbg:tracer(),dbg:p(all,c),dbg:tpl(Mod,Func,x).
일반적으로 나에게 트릭입니다. Mod 및 Func을 디버깅 할 모듈 및 함수로 바꿉니다.
사소한 로깅을 찾고 있다면 sasl과 error_logger가 친구입니다. 물론 SASL이 충분한 정보를 제공하지 못하는 경우가 있습니다. 시스템에서이 일이 많이 발생하면 SASL 출력을 더 잘 이해하고 자신 만의 로그 처리기를 작성해야합니다. 자체 오류 처리기를 SASL에 플러그인하여 원하는대로 출력 할 수 있습니다.
그러나 컴파일 타임에 해당 정보가 파괴되어 VM이 어느 행이 손상되었는지 알 수 없으므로 행 번호를 얻지 못합니다. 그러나 어떤 함수가 어떤 인수를 가지고 있는지를 알고 있지만, 일반적으로 어떤 것이 잘못되었는지를 알아내는 것이 가능합니다. 매우 긴 함수를 작성하지 않는 한, IMO는 나쁜 코드의 냄새이며, 코드를 작은 함수로 리팩터링해야한다는 표시입니다.
이 코드를 직접적으로? – Bertaud
함수에 넣을 수는 있지만 일반적으로 erlang 쉘에이 코드를 입력하면됩니다.이 함수는 로깅이 아닌 디버깅 용으로 사용됩니다. 코드의 최적화를 호출하여 너무 길게 켜면 메모리가 부족해질 수 있습니다. – Lukas
디버깅중인 실제 함수에 넣을 수 없습니다. 코드를 실행하기 전에 실행해야합니다. if 코드를 응용 프로그램 시작시 또는 어딘가에 넣으려는 경우, erlang에서 발급합니다. ll이 선호되는 방법이지만 시작 동작을 디버깅하지 않는 한 제대로 작동해야합니다. – Lukas
일반적으로, 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 스위트에서 redbug 도구를 사용
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. Django에서 초기 쿼리를 구체화하는 방법은 무엇입니까?
- 2. 검색 결과를 구체화하는 방법
- 3. Java에서 코드 디버깅을 피하는 방법은 무엇입니까?
- 4. 디버깅을 위해 MySQL에서 메시지를 출력하는 방법은 무엇입니까?
- 5. JBOSS 5에서 원격 디버깅을 활성화하는 방법은 무엇입니까?
- 6. 원격 디버깅을 마치면 msvsmon.exe를 죽이는 방법은 무엇입니까?
- 7. dozer에 대한 디버깅을 끄는 방법은 무엇입니까?
- 8. 네이티브 원격 디버깅을 설정하는 방법은 무엇입니까?
- 9. 확장 유형을 구체화하는 일반 유형 args?
- 10. App Engine 응용 프로그램의 디버깅을 작동시키는 방법은 무엇입니까?
- 11. XDebug, 단일 .php 파일에 대한 원격 디버깅을 비활성화하는 방법은 무엇입니까?
- 12. AS3 : 디버깅을 위해 trace 문에 현재 클래스를 인쇄하는 방법은 무엇입니까?
- 13. 디버깅을 위해 WINDBG 디버깅 도구를 사용하는 방법은 무엇입니까?
- 14. 프로세스를 중단하지 않고 디버깅을 중지하거나 프로세스를 분리하는 방법은 무엇입니까?
- 15. Visual Studio 2008에서 JavaScript 디버깅을 사용하지 않도록 설정하는 방법은 무엇입니까?
- 16. makefile : 디버깅을 위해 줄 번호를 표시하는 방법은 무엇입니까?
- 17. 디버깅을 위해 Eclipse의 "관련 소스"를 변경하는 방법은 무엇입니까?
- 18. 디버깅을 위해 배포 된 응용 프로그램을 기록하는 방법은 무엇입니까?
- 19. gdbserver없이 Eclipse CDT로 원격 디버깅을 수행하는 방법은 무엇입니까?
- 20. 디버깅을 위해 현재 ASP.NET 관리 프로세스의 덤프를 만드는 방법은 무엇입니까?
- 21. 디버깅을 위해 실버 라이트 앱을 올바르게 설정하는 방법은 무엇입니까?
- 22. 시스템 라이브러리 호출의 소스 수준 디버깅을 수행하는 권장 방법은 무엇입니까?
- 23. 사용자 계정에서 jit 디버깅을 시작했습니다. - 문제점은 무엇입니까?
- 24. PHP 디버깅을 배우기에 좋은 리소스
- 25. wcf가 디버깅을 위해 디버깅을 설정하려고하는데, 로그 파일에 쓰지 않습니다.
- 26. akka 디버깅을 구성하십시오.
- 27. 디버깅을 시작하는 방법?
- 28. Internet Explorer의 디버깅을 디버그합니다.
- 29. 디버깅을 위해 #define LOG_MSG (...)
- 30. Android : USB 디버깅을 사용하여 앱 실행
크래시 보고서가 버그가 발생한 위치와 이유를 알려주는 것이 좋을 것입니다. 불행히도 그들은 어디서 왜 추락했는지, 때로는 버그가 발생하는 곳과 이유가 무엇인지 알려주지 않습니다. ( –
샘플 충돌 보고서를 제공 할 수 있습니까? –
일반적인 질문이었습니다! – Bertaud