센로그
[ED] 5. 정상 시스템과 비정상 시스템의 차이점 분석하기 본문
차이점을 분석하면서 디버깅
- 플랫폼을 옮긴다거나, 버전업을 하는 등의 상황에서는 기존 시스템과 새로운 시스템을 동시에 살펴봐야 하는 경우가 있다.
- 이런 경우 두 시스템의 차이점을 분석함으로써 디버깅을 하면 효과가 좋다.
디버깅 하는 방법
- 우선 로그 파일을 찬찬히 들여다보며 오류를 찾는다.
- 그러나 로깅 메커니즘이 원하는 만큼 로그를 출력하지 않는다면, 트레이싱 도구로 런타임 동작을 분석할 수 있다.
- 세부적인 부분에 특화된 도구들이 존재한다.
- 운영체제 호출 과정 추적
- strace, truss, Procmon...
- dll 호출 과정 추적
- ltrace, Procmon...
- 네트워크 패킷 추정
- tcpdump, Wireshark
- SQL db 호출 추적
- 운영체제 호출 과정 추적
- 세부적인 부분에 특화된 도구들이 존재한다.
- 대조 방식으로 디버깅하기 위한 환경을 꾸미고, 명확한 부분(입력이나 명령줄 인수 등)부터 시작한다.
- 추측하지 말고 직접 확인하도록 한다.
- 가능하다면 두 시스템에 대한 입력 파일을 직접 비교하라는 뜻이다.
- 그리고 나서 코드 분석을 한다.
- Visual studio의 경우 dumpbin을 사용할 때 /dependents 옵션을 켜서, 사용하는 동적 라이브러리도 함께 분석한다.
간과하고 있는 다른 요인은 없는지 확인
- 소스코드 단으로 깊게 파고들기 전에 간과하고 있는 다른 요인은 없는지 확인하면 좋다.
- 대표적으로 환경변수, 운영체제 등이 있다.
- 대표적으로 환경변수, 운영체제 등이 있다.
버전의 범위를 좁혀나가며 확인
- 이진 탐색 방식으로 범위를 빠르게 좁혀나간다.
- 정상 작동 시스템 버전이 100, 오류가 발생한 버전이 132라면,
우선 중간값인 116부터 테스트해보고,
오류가 있다면 108을, 오류가 없다면 124를 테스트 해보라는 소리다.
- 정상 작동 시스템 버전이 100, 오류가 발생한 버전이 132라면,
로그파일 비교를 통해 버그 찾기
- 두 파일의 차이점을 찾아서 화면에 표시해주는 명령어를 사용한다. (diff 등)
- 타임스탬프 같은 건 당연히 다를 테니, 미리 잘라내도록 한다. (cut, awk 등)
나의 생각
+) Windows에서 로그 파일 비교를 위한 명령어
- fc : 기본 텍스트 비교 도구, 옵션을 사용해 세부 조정 가능
- 행 단위 비교 (/L 옵션)
- 대소문자 무시 (/C 옵션)
- 문자별 비교 (/B 옵션)
- 동기화된 위치에서 비교 시작 (/A 옵션)
fc /옵션 log1.txt log2.txt
- PowerShell의 Compare-Object : 행 단위 비교에 강력하며, 어느 파일에만 있는지 표시
Compare-Object (Get-Content log1.txt) (Get-Content log2.txt)
- PowerShell의 -replace: 불필요한 부분을 제거하고 비교
# 정규 표현식을 사용하여 타임스탬프 제거하고 비교
$log1 = Get-Content log1.txt | ForEach-Object { $_ -replace "\[\d{2}:\d{2}:\d{2}\]", "" }
$log2 = Get-Content log2.txt | ForEach-Object { $_ -replace "\[\d{2}:\d{2}:\d{2}\]", "" }
Compare-Object $log1 $log2
'Effective > Effective Debugging' 카테고리의 다른 글
[ED] 7. 빌드 및 실행 환경을 다양하게 구성하기 (2) | 2024.11.12 |
---|---|
[ED] 6. 소프트웨어에서 제공하는 디버깅 기능 활용하기 (0) | 2024.11.12 |
[ED] 4. 문제 발생 지점부터 버그를 추적하거나, 프로그램 시작 지점부터 버그를 찾아나가기 (0) | 2024.11.11 |
[ED] 3. 선행 조건과 후행 조건 만족 여부 확인하기 (0) | 2024.11.11 |
[ED] 2. 해결책을 웹에서 검색할 때 검색어를 구체적으로 표현하기 (0) | 2024.11.11 |
Comments