http://blog.naver.com/musk95/100011087174
복잡한 어플리케이션을 만들때, 갑자기 다운되거나 경고가 발생하거나하는 다양한 에러가 발생될때가 있습니다. 이런 때의 원인은 대개는 자신에게 있습니다만, 이따금 DELPHI의 버그이거나 컴퍼넌트의 버그이거나도 합니다. 그렇지만, 디버그 해도 원인이 되는 코드를 모를 때도 있습니다.
그럴때, 프리 소프트웨어로 간편하게 메모리 릭이나 메모리 해제를 잊은 부분을 체크할 수 있는 것이 「MemProof」입니다.
우선 MemProof를 다운로드 할 수있는 곳은 아래와 같습니다. (2005/3/15현재)
위의 링크를 클릭해 맨 위의
Zipped Archive - Without Installation Program and Without Help File (2,457,063 bytes)를 다운로드합니다. 아직까지는 델파이 7.1까지만 지원합니다. 클릭하면 다운로드가 시작됩니다.또 맨 밑의
Zipped Archive - Without Installation Program (1,596,906 bytes)에는 헬프 파일과 튜토리얼 파일이 첨부되어 있습니다.
다운로드한 파일을 압축해제하면 OK입니다.
MemProof (Build 0.950 July 19, 2004)로 Delphi 2, 3, 4, 5, 6, 7, 7.1; C++Builder 1, 3, 4, 5; and Borland C++ 5를 지원한다고 되어있습니다.
* 델파이에서의 설정
「Project」-「Options...」의 「Project Options」화면에서
- 「Compiler」탭의 「Optimization」을 제외
- 「Compiler」탭의 「Stack frames」을 체크
- 「Compiler」탭의 「Debug Infomation」을 체크
- 「Compiler」탭의 「Use Debug DCUs」을 체크
- 「Linker」탭의 「Include TD32 debug info」에 체크
이제 설정을 모두 완료 하셨다면 예를 하나 들어 보겠습니다.
그다지 좋은 예제는 아니지만 참고 차원에서 봐주시기 바랍니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
Bitmap : TBitmap;
begin
Bitmap := TBitmap.Create;
Bitmap.Width := 100;
Bitmap.Height := 100;
end;
end.
위의 소스대로 실행 파일을 만들어 memproof로 테스트 합니다.
MemProof를 실행합니다.「File」-「Open」로 방금전의 EXE 파일을 선택합니다.그리고 「Run」-「Run」로 실행합니다
그리고, 적당하게 조작한 뒤 어플리케이션을 종료시키면, 메모리·자원의 해제되지 않은 곳을 표시해 줍니다.DELPHI의 소스내에서 발견했을 경우는 소스의 장소까지 알려줍니다.(참 편리한기능입니다.)
「Resource Counters」의 「Resource Count」 「Current #」이 현재도 확보하고 있는 자원의 수이므로, 종료해도 0(제로)이 아닌 것은 해제되지 않은 것이 됩니다.
위에 보면 버추얼 메모리 에러가 나는데 델파이 7.0에서는 계속 발생하는 에러입니다.
꼭 4KBytes가 누수 되는군요..
소스에서 해제시켜주지 않은 Bitmap부분의 코드가 표시됩니다.
모두들 새지않는 프로그램을 짜세요.