트레이스(소프트웨어)
Tracing (software)시리즈의 일부 |
소프트웨어 개발 |
---|
소프트웨어 엔지니어링에서 추적은 프로그램 실행에 대한 정보를 기록하기 위해 로깅을 전문적으로 사용하는 것을 포함합니다.이 정보는 보통 프로그래머가 디버깅 목적으로 사용하며 트레이스 로그에 포함된 정보의 유형과 상세 내용에 따라 경험이 풍부한 시스템 관리자 또는 기술 지원 담당자 [1]및 소프트웨어 모니터링 도구에 의해 소프트웨어의 일반적인 문제를 진단할 수 있습니다.추적은 교차하는 문제입니다.
트레이스라는 용어가 프로그램의 기능요건인 로깅에 거의 적용되지 않는다는 점(따라서 고에너지 물리실험에서의 데이터 취득이나 미리 쓰기 로깅 등 외부 소스로부터의 데이터 로깅 제외)을 제외하고 트레이스라는 용어가 항상 명확하게 구분되는 것은 아닙니다.프로그램 사용현황(서버 로그 등) 또는 시스템 관리자(이벤트 뷰어 등)가 주로 관심을 갖는 운영시스템이벤트를 기록하는 로그는 용어상 회색 영역에 들어갑니다.
이 문서에서는 주로 디버깅 또는 진단을 위한 트레이스에 대해 설명합니다.
이벤트 로깅과 트레이스
이벤트 로깅과 소프트웨어 트레이스를 명확하게 구별하는 데 어려움이 발생하는 것은 동일한 테크놀로지의 일부가 양쪽 모두에 사용되기 때문입니다.또, 이 둘을 구별하는 기준의 대부분이 이산형이 아닌 연속형이기 때문입니다.다음 표는 개발자가 각 목적에 맞는 기술을 선택하기 위해 사용하는 중요하지만 정확하거나 보편적이지 않은 몇 가지 차이점을 나열하고 있으며, 각 영역에서 새로운 기술을 개별적으로 개발하는 데 도움이 됩니다.
이벤트 로깅 | 소프트웨어 트레이스 |
---|---|
주로 시스템 관리자가 사용 | 주로 개발자에 의해 소비됨 |
"개요 수준" 정보를 기록합니다(예: 프로그램 설치 실패). | "저수준" 정보를 기록합니다(예: 예외 발생). |
너무 시끄럽지 않아야 함(대상 사용자에게 도움이 되지 않는 중복 이벤트 또는 정보가 많이 포함됨) | 시끄러울 수 있다 |
표준 기반의 출력 포맷이 바람직한 경우가 많으며, 경우에 따라서는 필요한 경우도 있습니다. | 출력 형식에 대한 제한은 거의 없습니다. |
이벤트 로그 메시지는 현지화되는 경우가 많다. | 현지화는 거의 문제가 되지 않는다 |
새로운 유형의 이벤트 추가 및 새로운 이벤트 메시지 추가는 민첩할 필요가 없습니다. | 새로운 추적 메시지 추가는 민첩해야 합니다. |
이벤트 로깅
이벤트 로깅은 시스템 관리자에게 진단 및 감사에 유용한 정보를 제공합니다.기록되는 이벤트의 다양한 클래스와 이벤트메시지에 표시되는 상세 정보는 개발 사이클 초기에 고려되는 경우가 많습니다.많은 이벤트로깅 테크놀로지에서는 이벤트 로그 소프트웨어 또는 개별 뷰어(이벤트 뷰어 등)에 의해 인간이 읽을 수 있는 메시지의 포맷 및 출력에 사용되는 고유한 "코드"를 이벤트의 각 클래스에 할당할 수 있습니다.이를 통해 현지화가 용이해지고 시스템 관리자는 발생한 문제에 대한 정보를 보다 쉽게 얻을 수 있습니다.
이벤트 로깅은 높은 수준의 정보(많은 경우 장애 정보)를 기록하기 위해 사용되기 때문에 로깅 구현의 성능은 그다지 중요하지 않습니다.
이벤트 슬롯링을 통해 중복 이벤트가 "너무 자주" 기록되지 않도록 각별히 주의해야 합니다.
소프트웨어 트레이스
소프트웨어 트레이스는 개발자에게 디버깅에 유용한 정보를 제공합니다.이 정보는 개발 사이클 중 및 소프트웨어 출시 후에 모두 사용됩니다.이벤트 로그와 달리 소프트웨어 트레이스에는 보통 이벤트의 "클래스" 또는 "이벤트 코드"라는 개념이 없습니다.이벤트 코드를 기반으로 한 이벤트로깅 솔루션이 소프트웨어 트레이스에 적합하지 않은 다른 이유는 다음과 같습니다.
- 소프트웨어 트레이스는 저레벨이기 때문에 정의해야 할 메시지의 종류가 더 많은 경우가 있으며, 그 대부분은 코드의 한 곳에서만 사용됩니다.이벤트 코드 패러다임에서는 이러한 "원샷" 메시지에 대해 상당한 개발 오버헤드가 발생합니다.
- 기록되는 메시지 유형은 이벤트 로깅에 비해 개발 주기 동안 안정성이 떨어지는 경우가 많습니다.
- 트레이스 출력은 개발자에 의해 소비되기 때문에 메시지는 현지화할 필요가 없습니다.따라서 트레이스 메시지를 현지화할 필요가 있는 다른 자원(이벤트메시지 등)과 분리하는 것이 중요합니다.
- 절대 보면 안 되는 메시지들이 있어요.
- 추적 메시지는 코드의 가독성을 높일 수 있으므로 코드에 보관해야 합니다.이벤트 로깅 솔루션에서는 이것이 항상 가능하거나 실현 가능한 것은 아닙니다.
소프트웨어 트레이스에서 고려해야 할 또 다른 중요한 사항은 퍼포먼스입니다.소프트웨어 트레이스는 낮은 레벨이기 때문에 가능한 트레이스 메시지의 볼륨은 훨씬 높아집니다.성능 문제를 해결하려면 컴파일 시 또는 런타임에 소프트웨어 트레이스를 끌 수 있어야 합니다.
기타 특별한 우려 사항:
- 독점 소프트웨어에서는 데이터 추적에 제품의 소스 코드에 대한 중요한 정보가 포함될 수 있습니다.
- 런타임에 트레이스를 유효 또는 무효로 하면, 많은 트레이스 방법에서는 대량의 추가 데이터를 바이너리에 포함할 필요가 있기 때문에, 트레이스가 무효가 되어 있어도 간접적으로 퍼포먼스가 저하될 가능성이 있습니다.
- 컴파일 시에 트레이스를 유효 또는 무효로 하고 있는 경우, 고객 머신상의 문제에 관한 트레이스 데이터를 취득하는 것은, 고객이 트레이스 대응의 특별한 버전의 소프트웨어를 인스톨 해, 문제를 복제하는 것에 의해서 다릅니다.
- 트레이스의 많은 용도에는 매우 엄격한 견고성 요건이 있습니다.이는 트레이스 출력의 견고성뿐만 아니라 트레이스 중인 유스케이스가 중단되지 않아야 한다는 점에서도 마찬가지입니다.
- operating system에서는, 이벤트 로그의 제공에 사용되는 테크놀로지 중 일부를 사용할 수 없는 상황(부팅등)에 트레이스가 도움이 되는 경우가 있습니다.
- 임베디드 소프트웨어에서 트레이스에는 [2]특별한 기술이 필요합니다.
기술
소프트웨어 트레이스:
- 매크로 트레이스
- 디버거 출력
- 애스펙트 지향 프로그래밍 및 관련 계측 기술
- Windows 소프트웨어 트레이스 프리프로세서(WPP)
- FreeBSD 및 스마트DTrace를 사용한 OS 트레이스 - 커널과 사용자 랜드 트레이스
- ftrace를 사용한 Linux 커널 트레이스
- 커널 마커 및 LTTng을 사용한 Linux 시스템 레벨 및 사용자 레벨 추적
- UST를 사용한 Linux 응용 프로그램 추적 - LTTng와 동일한 프로젝트의 일부
- cwrap을 사용한 Linux C/C++ 응용 프로그램 추적
- GNU 디버거의 trace[3] 명령을 사용한 추적
이벤트 로깅:
- syslog(구체적인 실장에 대해서는 기사 참조)
양쪽 모두에 적합:
트레이스 분석
트레이스 분석은 소프트웨어 시스템의 실행에서 지식을 추출하는 것으로 구성됩니다.트레이스 분석의 한 종류는 트레이스 얼라인먼트입니다.트레이스 내에서 같은 동작에 [4]대응하는 공통적인 부분을 식별하는 것으로 구성됩니다.트레이스 얼라인먼트는 트레이스의 크기와 실제 트레이스의 [5]비결정성 및 노이즈 때문에 복잡한 문제입니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "The Tracing Book". Archived from the original on 2009-02-24.
- ^ Kraft, Johan; Wall, Anders; Kienle, Holger (2010), "Trace Recording for Embedded Systems: Lessons Learned from Five Industrial Projects", Runtime Verification, Springer Berlin Heidelberg, pp. 315–329, doi:10.1007/978-3-642-16612-9_24, ISBN 9783642166112
- ^ "Tracepoints (Debugging with GDB)". sourceware.org. Retrieved 2022-06-24.
- ^ Weber, Matthias; Brendel, Ronny; Brunst, Holger (2012). "Trace File Comparison with a Hierarchical Sequence Alignment Algorithm". 2012 IEEE 10th International Symposium on Parallel and Distributed Processing with Applications. IEEE: 247–254. doi:10.1109/ispa.2012.40. ISBN 978-1-4673-1631-6.
- ^ Cabrera Arteaga, Javier; Monperrus, Martin; Baudry, Benoit (2019). "Scalable comparison of JavaScript V8 bytecode traces". Proceedings of the 11th ACM SIGPLAN International Workshop on Virtual Machines and Intermediate Languages - VMIL 2019. ACM Press: 22–31. arXiv:1910.03478. doi:10.1145/3358504.3361228. ISBN 9781450369879.