모종의 방법으로 받아와서 디버거에 연결하여 디버깅한다.
디버거에서 디버깅을 잘 하기 위해서 해당 바이너리의 pdb와 소스를 관리해야 한다.
-> 심볼서버를 운영해야 한다.
-> 정확히 배포바이너리의 버젼과 심볼서버의 심볼, 소스서버의 소스를 연결시켜야 한다.
-> 빌드서버를 운영해야 한다.
-> 토할것 같다
여태까지 살펴본 “배포버젼을 디버깅 하는 방법” 에 관한 내용.
배포버젼의 경우 사용자의 운영체제, 핫픽스버젼에 따라 정확한 운영체제 심볼과 사용자가 사용하고 있는 프로그램(즉 우리가 배포한 프로그램)버젼의 정확한 심볼을 관리해서 사용자가 버그가 났을때의 미니덤프를 디버거에서 저 심볼들과 소스들을 잘 매칭시켜서 디버깅 환경을 구축해야 효율적인 디버깅이 가능하다.
어쨋거나 위에서 요구하는 버젼별 바이너리와 심볼관리 를 위해서는 지금 같은 방식의 중구난방식의 배포판 생성을 해서는 안된다.
적어도 빌드서버가 따로 있어야 한다.
예상하는 시나리오는
그러니깐 각각 개발자들이 소스세이프에서 소스를 다운받아서 코딩하고 수정하고 컴파일하고 테스트까지는 자기 컴퓨터에서 하지만
이녀석을 배포한다.
라고 정해지면 해당 소스를 모두 체크인 시키고 빌드서버에서 스크립트에 의한 빌드를 실행한다.
그러면 빌드서버는 소스세이프에서 최신의 버젼의 소스를 얻어오고 빌드넘버를 +1(어쨋거나 프로그램의 버젼을 조정) 시켜 이전의 배포판과 다른 버젼으로 컴파일하고 컴파일후 생성된 바이너리와 심볼파일은 자동으로 심볼서버로 업데이트(물론 해당 버젼에 따라). 그 이후 바이너리 파일을 패키징시켜 배포판을 생성해서 완전히 CD로 구울수 있는 상태등으로 만든다.
(물론 컴파일후 유닛테스트도 들어가면 좋겠다)
위의 일련의 과정이 자동 스크립트화 되지 않으면 관리가 불가능 하다.
흠.. 뭐 위 내용을 자동화 시키는 스크립트가 그리 어렵지는 않을 것같다. 어쨋든 비주얼스튜디오, 소스세이프, 심볼서버등도 모두 커맨드라인을 지원하니…
일단 의문점들
1. 운영체제 심볼구성
필요한 운영체제의 심볼을 얻기 위해서는 개발자 측에서 운영체제를 설치하고 핫픽스, 서버시팩 을 하나하나 적용하면서 운영체제 심볼을 symchk 로 구성하는 수밖에는 없는건가?
(미니덤프에 사용자의 운영체제 버젼이 적혀있고 디버거가 연결할때 필요한 심볼이 없으면 그것만 알아서 다운받게 할수는 없나?)
심볼구성이 은근히 빡세다. 게다가 오랬동안 사용한 머신의 경우 system32 폴더에 갖가지 응용프로그램들의 dll 이나 exe까지 자리를 차지하고 있는 경우가 있어서 시간, 용량의 낭비가 예상된다.
2. 정확한 버젼의 소스
이걸 구성하기 위해서는 각 배포버젼마다 소스를 남겨 두어야 하는건가?
(소스세이스프 같은걸 엘레강스하게 사용할 방법은 없는 것일까?)
3. 릴리즈빌드시의 심볼파일 생성
어쨋거나 릴리즈 빌드를 한 바이너리를 디버깅할수 있게 하는것도 하나의 목적인데 이런 빌드설정이 속도를 얼마나 떨어뜨리느냐가 관건..
4. 빌드시 빌드넘버 or 버젼 넘버링
이거 당췌 어떻게 하는거야?!
컴파일 직전에 스크립트로 리소스 파일을 수정이라도 해야 하나? 그리고 미니덤프에서 프로그램 버젼은 어떻게 매칭하는지 알아야 빌드넘버 넘버링을 하지.
그리고 어쨋거나 추가해야 할것
1. 사용자들에 의한 자동리포팅 시스탬
프로그램이 죽는 경우가 아니더라도 사용자가 “버그리포팅”을 선택하고 현재의 상태와 어떤점이 버그인지 간단히 기술해서 리포팅 시키면 미니덤프+프로젝트파일+데이타파일 을 전송
2. 웹에서의 버그리포팅, 추적시스탬 구축
쩝… 기존에 구축해 봤던 사람이라면 모르겠지만… 리포팅 그런거 다 빼고 심볼서버, 빌드서버 로 미니덤프만 디버깅 하게 하는것도 빡시다.