갱주니님을 통해서 VS 2005의 코드분석에 대해서 알게 되었는데 사용하기 전까지는 얼마큼 효용이 있을지 의문스러웠는데 오늘 사용해 보니 아주 좋더군요.

 

이것 덕분에 오늘 손쉽게 버그 하나를 잡을 수가 있었습니다.

잡은 버그는 다음과 같습니다.

 

……………………………..

1.  char cResult = RESULT_OK;

2.  AuthenticUser* ptAuthUser = GetAuthUser(ptReq->Key);

3.  if( NULL == ptAuthUser ||

4.      0 != strncmp( ptAuthUser->acXXXStr, ptReq->acXXXStr, LEN_XXX_STR ) )

5.  {

6.      cResult = 1;

7.  }

       

…………………

8.   ptRet->sChannelNum = ptReq->sChannelNum;

9.   strncpy( ptRet->acID, ptAuthUser->acID, MAX_USERID );

……………………………

 

3번 라인에서 ptAuthUser에 대해 체크를 한 후 NULL인 경우에

cResult = 1을 대입합니다. ptAuthUser NULL이 될 수도 있죠.

그런데 제가 정신 줄을 놓는 바람에 -_-;;;

9라인에서 ptAuthUser  객체를 사용하고 있습니다.

3번의 조건 체크에서 false가 나온 경우 바로 할당 되지 않은 객체를 사용하게 되어

프로그램이 종료가 되겠죠.

 

이 버그는 문법 에러는 나지 않았어 빌드에는 문제가 없고, 또 테스트 할 때는 보통 실패 날 확률이 작았어 모르고 그냥 넘어 갔다가 이후에 프로그램이 죽게 되면 버그를 찾을 확률이 꽤 높은 것입니다.

 

그런데 이것을 VS 2005의 코드 분석으로 체크를 하니 바로 잡아 낼 수 있어 어처구니 없는 실수는 미연에 방지 할 수 있을 것 같습니다.



아직까지 코드분석을 사용하지 않고 있다면 꼭 사용하기를 권합니다.

신고
by 흥배 2008.03.20 23:41
| 1 |