티스토리 뷰

반응형

윈도우 디버깅에는 여러가지 툴의 종류가 있다. 무엇이 있는지 알아보자. 

점차 채워넣을 것이고 거의 모든 툴에 대한 설명이 끝날 때까지 문서를 완료하지 않을 것이다. 

 

1. 프로세스 

 

 

 

 

 

2. 메모리

 

- 누수 진단 툴

 

예전에 leak diag라는 툴이 있었다. 

프로세스 상에서 메모리 누수와 할당이 된 스택 트레이스를 보여주고 그래프 통계로 보여주면서 

명확하고 세부적인 정보를 보여준다. 

 

그러니 이제는 사라져서 다른 방법을 택해야 한다. 그 전까지는 이 leak diag라는 툴이 가장 좋았다. 

그 이유는 leak diag는 모든 할당자를 지원하기 때문인데, detours 기술을 사용하기 때문이다. 

굳이 운영체제의 스택 트레이싱 지원 기능을 활성화할 필요가 없다. ( > umdh는 활성화해야 한다)

{ 가상 할당자, 힙 할당자(디폴트), MPHeap 할당자, COM AllocatorCcoTaskMem, COM 전용(Private) 할당자, C 런타임 할당자 } 

 

>> 하지만 이제는 더 이상 지원하지 않아 다른 툴을 사용해야 한다. 그렇지 않으면 leak diag 같은 것을 따로 만들어야 한다.

 

 

 

- UHDH

umdh는 표준 힙 관리자의 할당을 보여준다. 힙 관리자에서 기원하는 메모리만 추적할 수 있기에 

아쉽다... 아쉬워서 시간이 되면 반드시 detour를 이용해서 leak diag를 부활시킬 생각이다. 

(작업하고 있는데 시간이 부족해서 완성을 못시키고 있다.....기본은 되었는데, 퍼포먼스가 안나와서 문제다)

 

glfag와 함께 쓰지 않으면 메모리 관련 콜스택 추적이 올바르게 나오지 않을 가능성이 높아 

반드시 설정하는 편이 좋다. 

 

- Application Verifier

 

이름 자체만으로 알 수 있다. 일반 어플리케이션의 '검증'이 주효하다.

invalid handle, crash, lock 등의 예외를 '미리' 확인할 수 있다. 주로 사용하기에는 QA나 테스트 시에 

특정 어플리케이션이나 서비스에 물려서 구동시키면 '설정한' exception이 발생하게 되는데 릴리즈 나가서 터지기 

전에 미리 발견할 수 있다. 

다만 너무 많이 예외 설정하거나 잡도록 하면 실제로 핸들링이 되는 exception인데도 그 전에 잡아버려서

이는 구별해야 한다. 

그러므로, 개발 기간 동안 활성화하는 것이 좋은 습관이다. 다만 아무래도 디버깅 툴이다보니 느려터진다. 

 

각각의 툴 설명에 대해서는 따로, 지면을 할당하여 설명한다. 

 

- GFlags

 

디버거를 위한 디버거, 설정 프로그램 

GUI 모드를 사용해서 gflag.exe를 직접 실행시키면 Global Flags라는 이름의 윈도우를 가진 GUI 프로그램이 실행된다.

똑같은 명령어로 gflags로 커맨드 입력을 넣으면 그것으로도 실행이 되는데, 대부분은 이 커맨드 명령을 주로 사용한다.

이 프로그램 자체를 주로 사용하지 않기 때문이다. 

 

시스템 전역 설정은 리부팅, 프로세스 단위는 프로세스를 재실행 해야 한다. 잊지 말자. 

 

일반적으로 많이 쓰이는 명령어는 다음과 같다. 

예를 들어 calc.exe에 대해 유저 모드 스택 트레이스 데이터베이스를 활성화( 이렇게 해야 메모리를 할당한 지점 발견 시

당시의 메모리 할당한 콜스택 및 pdb가 연결된다) 

 

gflags /i 프로그램.exe +ust

해제는 -ust

> 다만 메모리 및 디스크를 엄청 먹어대니 조심하자. 프로그램 실행도 느려진다. 

이는 detour를 샘플 프로그램으로 돌려보면 이해할 수 있다. 스택 트레이싱을 레코드하다보니 그런것이다. 

 

 

 

 

 

 

 

 

 

 

 

3. 시스템 

 

 

 

 

 

 

 

 

 

 

 

 

 

* 참고사항 : 

kuaaan.tistory.com/164

 

Leak Debugging(2) - LeakDiag로 메모리 누수 디버깅하기 (Debugging Memory Leak with LeakDiag)

정말 오랜만에 Technical 한 포스팅을 하는 것 같습니다. 원래는 업무하고 남는 시간에 블로깅을 했었는데.... 요즘엔 업무시간 끝나면 바로 퇴근해서 집에와서 아기를 봅니다. 그러다가 잠들고 아

kuaaan.tistory.com

 

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함