깃으로 디버깅 하기 - git bisect 활용 기술 이야기 2015. 4. 30. 14:41

오 맙소사! 이렇게 좋은 기능이 있었다니... 깃은 정말 너무 훌륭한 프로그램인것 같다. 간단하다면 한없이 간단하고 복잡하다면 한없이 복잡한 모습이 매력적이며, 알면 알 수록 유용한 기능과 뛰어난 확장성을 보여준다. (알수록!!!)

먼 옛날 내가 사원일때...디버깅이 정말 어려운 문제가 있었다. 공정 성능 문제여서 디버깅 자체가 쉽지 않은 상황인지라 로그도 없이 코드 분석을 했지만 쉽지 않았다. 결국 나는 구미로 출장을 갔다.

그 거대한 챔버 앞에서 밤을 새면서 내가 한일은...문제가 발생하지 않았던 버전부터 차례대로 빌드해서 결과를 보는 방식이었다. 그때 이진탐색 방법으로 히스토리를 좁혀갔는데 동일한 방법이 git bisect 기능으로 구현되다니!!! 이건 마치 나의 경험을 바탕으로 토발즈가 만들어준듯한ㅋ

그때 나는 RF 엔지니어였고, 문제는 사운드 솔루션에서 발생했다. 무관한 부분일 수 있는데, 새롭게 추가된 솔루션이 cpu 클럭을 높여서 간섭이 메인보드가 과부하되면서 GSM band 쪽으로 약간의 간섭을 발생시켰다. (원칙적으로는 HW적으로 쉴딩이 불안정한 것이 문제지만 SW로 해결했다-_-)

정말 최종적으로 그 수정사항을 빼서 확인하기 전까지 그 코드가 문제를 발생시켰을 것이라고 아무도 예상하지 못했다. 아주 약간의 차이라서 USB연결이나 로깅은 할 수도 없었다. (정말 연약한 임베디드 시스템이었다)

쓸때없이 옛날이야기를 늘어놨는데...잠시 추억여행ㅋㅋㅋ 꼭 그런 케이스가 아니라도 매우 유용한 디버깅 방법 중 하나이다. 이 방법의 디버깅을 git bisect 를 이용하면 아주 쉽게 반복 테스트 할 수 있을것 같다.

사용 방법

방법은 매우 간단하다.
1. 문제가 발생하는 커밋(bad 커밋) 찾기
2. 문제가 발생하지 않는 커밋(good 커밋) 찾기
3-1. 차례대로 아래 커맨드 수행하면 자동으로 특정 커밋으로 checkout 진행됨.

$ git bisect start
$ git bisect good [good 커밋ID]
$ git bisect bad [bad 커밋ID]

3-2. 테스트 결과를 git에게 알려주기
단지 good 또는 bad 만 알려주면 자동으로 특정커밋으로 변경해줌.

$ git bisect [good/bad]
결과에 따라 good 또는 bad 선택

3번 스텝을 반복하다 보면 문제 커밋을 찾아서 알려줌
물론 그냥 수동으로 직접 checkout 해가면서 해도되고, 내가 의심되는 커밋부터 확인해보는 것이 더 빠를 수도 있다.ㅎ

설명을 잘해둔 사이트

  1. git으로 디버깅하기
  2. 6.5 Git 도구 - Git으로 버그 찾기


댓글