2010. 8. 3. 12:52
Application Verifier 사용하기
|
l Win 32 일 경우 다운로드는 아래 사이트에서 x86버전으로 받을 것.
l 대략적인 사용법은 http://blog.naver.com/titerced/100045103644 참고 바람.
Application Verifier(이하 AV)는 MS에서 배포하는 ‘실행 파일 검증 도구’로서 Access Violation , Hangs, Lock 오류, Handle 손실, Memory 침범 또는 삭제오류(중복삭제, 삭제한 곳을 사용) 등의 오류를 사전에 검출할 수 있는 도구로 유용하다.
때문에 실행파일의 배포 전에 이 도구를 이용해서 여러 가지 테스트를 하는 것이 꼭 필요하다고 생각을 한다.
테스트라고 해서 특별한 것은 없고 실행파일을 AV에 등록해서 계속 돌려 보기만 하면 된다.
아래 오류 발생코드를 보자. ( 메모리 침범의 간단한 예제이다. )
char * pTemp = NULL;
pTemp = new char[10];
memset(pTemp,0,100);
메모리를 10 바이트 할당하고 100바이트를 초기화 시켰다.
명백한 메모리 침범 예인데 , 이 경우 release 에서는 경우에 따라서 죽을 수도 있고 , 안 죽을 수도 있다. 위 코드로 보면 매우 간단한 경우지만 이런 유사한 오류가 실제로 초보자에게는 많이 발생한다.
아래는 AV에서 logs를 보면 나오는 내용이다.
<avrf:logEntry Time="2010-07-21 : 14:21:05" LayerName="Heaps" StopCode="0x13" Severity="Error">
<avrf:message>First chance access violation for current stack trace.</avrf:message>
<avrf:parameter1>37d7000 - Invalid address causing the exception.</avrf:parameter1>
<avrf:parameter2>411a90 - Code address executing the invalid access.</avrf:parameter2>
<avrf:parameter3>13fbf0 - Exception record.</avrf:parameter3>
<avrf:parameter4>13fc0c - Context record.</avrf:parameter4>
위 내용을 보면 오류코드에 대한 내용과 , EIP(411a90)정보를 확인할 수 있다.
411a90 내용을 확인해서 소스가 어디인지 알려면 Crash Finder를 사용하면 된다. 물론 PDB,MAP이 있다는 가정에서 이다.
Crash Finder 작업이 조금 귀찮다면 WinDbg를 사용하면 된다.
주의 : Application Verifier을 사용하게 되면 메모리 할당을 Release지만 Debug모드처럼 Memory Guard Block을 할당하고 , 메모리 침범 등 여러 가지 오류를 검출하는 동작을 하기 때문에 실제보다 많이 느리기 작동하게 된다. 때문에 절대 Real환경에서는 사용해서는 안 된다.
참고로 이전의 UMDH 예제 코드의 경우 아래와 같이 많은 양이 메모리가 할당 되는 것을 볼 수 있다.
+ 10 ( 4718 - 4708) 5 allocs BackTrace5AD
+ 1 ( 5 - 4) BackTrace5AD allocations
ntdll!RtlAllocateHeap+00000E9F
vfbasics!AVrfpRtlAllocateHeap+000000E0
(e:\verifier\source\base\avrf\avrf30\providers\basics\heap.c, 233)
Timetest!_heap_alloc+00000044 (f:\vs70builds\3077\vc\crtbld\crt\src\malloc.c, 211)
kernel32!BaseProcessStart+00000023
Total increase == 10 requested + 8182 overhead = 8192
또한 소스코드의 위치도 AV관련된 내용으로 변경 되었음을 알 수 있다.
l 사실 위와 같은 이유로 인해 AV를 이용해 대용량 서버의 오류를 찾으려고 할 때는 한계가 있다. 너무 많은 메모리사용과실행 속도의 감소가 있기 때문에 정상적인 작동을 보증하기 어려울 때가 많기 때문이다.
이 경우에는 WinDbg를 사용하면 된다.
주의 2 : Application Verifier을 사용하다 셋팅을 해지 할 때는 꼭 해당 exe파일의 등록을 지우고 하단의 ‘Save’ 버튼을 이용해 환경 저장을 한번 더 해줘야 한다.
Application Verifier에서 등록은 프로그램의 종료로 없어지는 것이 아니고 시스템에 남아 있기 때문에 , 반드시 삭제를 통해서 등록을 해지해야 한다.
댓글 없음:
댓글 쓰기