최근에, AC2에서 디버거 활용하여 디버깅을 하신 세션을 공유한 세션을 듣고 나의 생각이 있어 적어 봅니다저는 개발자이고 싶은 관리자(^.^)이기 때문에 사례의 경우 동료들의 같이 하는 고민으로 이해 해주시면 됩니다. Android Phone Framework System Service 주로 개발하는 저와 동료들의 경우도, 요사이 디버깅은 로그 베이스일 밖에 없다는 생각이 들었습니다. 디버깅을 10번한다면, 9 이상이지요. 이유는 번개 때에 지나가듯 이야기 해주시는 부분에 있다고 생각했습니다. 그래서, 빠르게 생각을 정리해 보았습니다.

 

제가 생각하기에 디버거가 예전 같이 많이 사용되지 않는 것은 리눅스와 같은 우선 멀티프로세스(Multi-process) 상황이기 때문이란 생각이 들었습니다. 주로, 디버거로 확인 가능한 것은 하나의 프로세스에서 관련된 심볼(High level language machine language 연결 시켜주는 정보) 읽어와서 보여주며 실행하여야 하기 때문이라고 생각됩니다. 우리가 담당하지 않는 다른 프로세스로 넘어가게 되면 확인이 어려워 집니다. 상황에서 타이밍 이슈가 있는 부분이라면, 로그와 같은 디버깅 코드를 추가하면서 문제가 사라지는 경우도 발생하게 됩니다. 것은 번개에서 언급되었던 것으로 기억합니다. 실재로 동료들과 이야기 나눠 봐도 디버거를 아예 모르는 분도 계시고 경력이 많은 분도 실재 기기에서는  Watchdog 같은 제약도 많아 로그 기반으로 접근한다고 하네요.

 

디버거로 가능한 것들은 어떤 것들일까요? 우선 디버거가 있으면 1. 원하는 코드 부분에서 멈추게 있습니다. 그것만 가능한 것이 아니고 2. 멈춘 후에, 상황에서의 변수들의 값을 확인할 있습니다. 그리고, 3. 함수를 불렸을 , 어떤 함수에서 호출한 것인지(call stack) 있습니다. 그리고 4. Call stack 따라 호출한 시점으로 변수의 (물론 호출하여 관련 변수들이 변경되었다면 최신 상태) 확인해 있습니다. 세션에서도 설명하셨지만, 5. 원하는 코드가 특정 변수의 상태일 멈추게하는 것과 같은 고급 스킬도 가능합니다. 세션에서도 시연을 시도하셨죠.

 

다시 돌아와 디버거를 언제 써야 할까요? 10번에 1번이 될까 말까 하는 기술을 알아 두는 것은 좋을까요? 세션에서 공유해주신 사례에 적절하다고 생각됩니다. 저도 이쪽 도메인을 몰라서 이상한 이야기일 있습니다. 제생각에 방법을 모르셨다면, 사용하시는 Framework 뒤지고 로그를 넣어가며 확인하셔야 했을 가능성이 있어 보입니다. , 우리가 사용하는 모듈의 복잡성이 높은 부분에서 필요한 부분을 적응적으로 찾아 봐야할 때가 디버거를 사용을 고민해야 하는 아닌가 조심스럽게 추측해 봅니다. 저의 요즘 화두인 탐색이 필요하겠다는 생각을 잠시 했습니다. 망치를 쓰는 법을 알았으니, 망치를 쓰는 것이 좋겠다 싶은 곳을 탐색도 하고 연습도 해야죠. 그리고, 여기 저기 망치질을 하고 다니는 아닌가 고민해야 하겠네요.

+ Recent posts