디버깅
-
교착상태(deadlock)를 프로세스 상태와 디버거를 사용해서 찾아내기Programmer/Programming 2017. 1. 6. 15:37
멀티미디어(multimedia) 소스를 수신 받아서 가공하고 송출하는 프로그램을 개선하고 있었다.에이징 테스트(aging test)에서 얼마간 프로그램이 동작하다가 미디어를 송출하지 못하는 버그를 발견했다.로그를 살펴보니 송출이 멈추기 전에 수신부터 진행이 되지 않는 것을 발견했다.UDP로 입력 데이터는 들어오는데 읽지 못하고 있었다. 기능이 멈춰있으면 있으면 두가지를 의심할 수 있다.하나는 무한루프, 나머지 하나는 교착상태(deadlock)이다.무한루프에 빠지거나 교착 상태에 진입하면 다음 단계로 나아가지 못한다. 무한 루프인지 교착 상태인지 간단하게 판단하는 방법은 프로세스의 CPU 점유율과 상태를 확인하는 것이다.`ps -u`나 top 유틸리티로 확인한다. 무한 루프는 CPU를 과도하게 점유하는지 ..
-
버젼 관리 시스템을 사용하여 문제를 해결하기Programmer/Programming 2017. 1. 6. 15:01
초반에는 문제의 원인을 충분히 넓게 잡아라."에서 중요한 디버깅 기법 하나를 간단하게 언급하고 넘어갔다. 분석의 과정이 없이 추론에 근거하여 새로 추가된 원격 기능과 캐싱 알고리즘만을 의심했다. 코드를 수정해도 상태가 개선되지 않았다. ... 중략 ... 이전 버젼과 차이점을 면밀하게 비교하면서 비로서 문제의 원인을 발견했다. 같은 환경과 같은 기능(즉, 로컬 파일 읽기)에서도 새 버젼에서 동일한 문제가 일어났다. 즉, 새로운 기능이 동작할 때 발생하는 것이 아니란 의미이다. 로깅 시스템을 리펙토링을 했는데, 이와 연관이 깊을 것으로 추정했고 다양한 테스트로 이를 검증했다. - 2014/07/15 - [Practice/Debugging] - 초반에는 문제의 원인을 충분히 넓게 잡아라. 버젼 콘트롤 시스템..