광고 수익은 기아대책 서울본부에 기부합니다.

2011.11.24 10:04 윈도우/스터디


Visual Studio 출력 창에 메모리 릭이 표시 된다. 예제 프로그램으로 간단히 정리 한다.
MFC 프로젝트를 이용하는 경우, 소스 위쪽에

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

위 코드를 추가하여 메모리 릭 위치를 추적 할 수 있다. 콘솔 프로그램인 경우 아래와 같이 한다.

1) 예제 프로그램 - 콘솔 응용 프로그램

// MemoryLeakTest.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"

// 콘솔 프로젝트에서 메모리릭 정보가 출력 창에 출력될 수 있도록 추가
#include <crtdbg.h>


int _tmain(int argc, _TCHAR* argv[])
{
 // 콘솔 프로젝트에서 메모리릭 정보가 출력 창에 출력될 수 있도록 추가
 _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

 int *nData = new int;

 return 0;
}

출력 값은 아래와 같다.

'MemoryLeakTest.exe': 'F:\Data\Study\MemoryLeakTest\Debug\MemoryLeakTest.exe' 로드, 기호가 로드되었습니다.
'MemoryLeakTest.exe': 'C:\Windows\SysWOW64\ntdll.dll' 로드
'MemoryLeakTest.exe': 'C:\Windows\SysWOW64\kernel32.dll' 로드
'MemoryLeakTest.exe': 'C:\Windows\SysWOW64\KernelBase.dll' 로드
'MemoryLeakTest.exe': 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_2a4f639a55563668\msvcr90d.dll' 로드, 기호가 로드되었습니다.
'MemoryLeakTest.exe': 'C:\Windows\SysWOW64\apphelp.dll' 로드
'MemoryLeakTest.exe': 'C:\Windows\SysWOW64\apphelp.dll' 언로드
Detected memory leaks!
Dumping objects ->
{116} normal block at 0x00698680, 4 bytes long.
 Data: <    > CD CD CD CD
Object dump complete.
'[2120] MemoryLeakTest.exe: 네이티브' 프로그램이 종료되었습니다(코드: 0 (0x0)).


{116} normal block at 0x00698680, 4 bytes long.
여기서 {116}은 메모리 생성 순서이다. 116번째 메모리 생성시 브레이크 포인트를 건다.

// MemoryLeakTest.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"

// 콘솔 프로젝트에서 메모리릭 정보가 출력 창에 출력될 수 있도록 추가
#include <crtdbg.h>


int _tmain(int argc, _TCHAR* argv[])
{
 _CrtSetBreakAlloc(116); // 116 번째 메모리 생성시 프레이크 걸리도록 추가

 // 콘솔 프로젝트에서 메모리릭 정보가 출력 창에 출력될 수 있도록 추가
 _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

 int *nData = new int;

 return 0;
}

실행 시키면 아래와 같이 중단점이 트리거 된다.


중단을 누르고 호출 스택을 보면 아래와 같다.

호출 스택에서 해당 위치로 가면 아래와 같이 메모리릭 발생 지점을 가리킨다.

하지만 프로그램이 크고 여러 모듈들이 비순서 적으로 로딩 되면 메번 실행시마다 생성되는 메모리 순서가 바뀌게 됩니다.

// MemoryLeakTest.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"

// 참고 : http://support.microsoft.com/kb/601929/ko

// 콘솔 프로젝트에서 메모리릭 정보가 출력 창에 출력될 수 있도록 추가
// 디버그 빌드 메모리 함수를 이용하여야 릭 표시시 파일이름이 표시된다.
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>

int _tmain(int argc, _TCHAR *argv[])
{
 //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
 int *nData = (int*) malloc(16);

 _CrtDumpMemoryLeaks( );
 return 0;
}

위와 같이 Define 을 추가하면 아래와 같이 해당 위치가 표시된다.

'MemoryLeakTest.exe': 'F:\Data\Study\MemoryLeakTest\Debug\MemoryLeakTest.exe' 로드, 기호가 로드되었습니다.
'MemoryLeakTest.exe': 'C:\Windows\SysWOW64\ntdll.dll' 로드
'MemoryLeakTest.exe': 'C:\Windows\SysWOW64\kernel32.dll' 로드
'MemoryLeakTest.exe': 'C:\Windows\SysWOW64\KernelBase.dll' 로드
'MemoryLeakTest.exe': 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_2a4f639a55563668\msvcr90d.dll' 로드, 기호가 로드되었습니다.
'MemoryLeakTest.exe': 'C:\Windows\SysWOW64\apphelp.dll' 로드
'MemoryLeakTest.exe': 'C:\Windows\SysWOW64\apphelp.dll' 언로드
Detected memory leaks!
Dumping objects ->
f:\data\study\memoryleaktest\memoryleaktest.cpp(16) : {116} normal block at 0x00418680, 16 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
'[3892] MemoryLeakTest.exe: 네이티브' 프로그램이 종료되었습니다(코드: 0 (0x0)).

더블 클릭 하여 해당 위치로 찾아간다.

'윈도우 > 스터디' 카테고리의 다른 글

DLL (Dynamic Link Library) 정리  (0) 2012.01.16
Media Transfer Protocol (MTP)  (0) 2011.12.15
PostThreadMessage로 SendThreadMessage 구현하기  (0) 2011.11.28
_stprintf_s  (0) 2011.11.28
Visual Studio C++ 메모리 릭  (2) 2011.11.24
posted by Town One townone

댓글을 달아 주세요

  1. Programmerj 2012.01.20 17:02  Addr  Edit/Del  Reply

    유용한 팁 잘 읽었습니다.^^
    요즘 디버깅에 관련해서 관심이 많은 혹시 추천해 주실만한 책있을까요?
    내일 부터 설 연휴네요~! 즐거운 명절 되시고! 새해 복 많이 받으세요^^

  2. 오맹 2012.01.30 15:06  Addr  Edit/Del  Reply

    감사합니다.
    1월 20 날에 제가 수술을 하는 바람에 ...
    디버깅은 로그 잘 남기고 map 파일과 미니 덤프 이용 하시고 지뢰 잘 놓으면 될 듯 싶네요. ^^
    저도 디버깅 책은 보지 않았구요. 인터넷에서 찾아보면서 하는 실정이라. 책추천은 힘들겠네요. 죄송해요.

2011.11.23 17:41 윈도우/참고

http://blog.naver.com/minjooon123/10122603703

'윈도우 > 참고' 카테고리의 다른 글

fatal error C1083  (0) 2011.11.28
THIS_FILE, DEBUG_NEW  (0) 2011.11.25
리버스엔지니어링 예제 - 참고 UPX1 실행 압축 풀기  (0) 2011.11.23
리버스 엔지니어링 예제  (0) 2011.11.23
Visual Studio C++ 2010 단축키  (0) 2011.11.23
Visual Studio C++ 2008 단축키  (0) 2011.11.23
posted by Town One townone

댓글을 달아 주세요

2011.11.23 17:18 윈도우/참고

http://blog.naver.com/minjooon123?Redirect=Log&logNo=10122806181
posted by Town One townone

댓글을 달아 주세요

2011.11.23 14:06 윈도우/참고


'윈도우 > 참고' 카테고리의 다른 글

리버스엔지니어링 예제 - 참고 UPX1 실행 압축 풀기  (0) 2011.11.23
리버스 엔지니어링 예제  (0) 2011.11.23
Visual Studio C++ 2010 단축키  (0) 2011.11.23
Visual Studio C++ 2008 단축키  (0) 2011.11.23
Visual Studio C++ 2005 단축키  (0) 2011.11.23
error LNK2019  (0) 2011.11.21
posted by Town One townone

댓글을 달아 주세요

2011.11.23 12:21 윈도우/참고

F12 // 함수원형으로 가기

Ctrl + F12 // 함수 선언으로 가기

Ctrl + K + C // 주석처리

Ctrl + K + U // 주석해제

Shift + Alt + Enter // 전체화면, 보통 화면

Ctrl + M + M // 함수숨기기(한줄로)

Ctrl + Spacebar // 함수, 매개변수 리스트

Ctrl + U // 선택된 문자 소문자로

Ctrl + Shift + U // 선택된 문자 대문자로

Alt + F7 // 프로젝트 속성

Ctrl + L // 한줄 자르기

Ctrl + -> // 다음문자로 이동

Ctrl + <- // 이전문자로 이동

Ctrl + G // 라인 찾아 이동

Ctrl + ] // 짝 따라가기


F2 // 북마크 찾아 가기

Ctrl + F2 // 북마크 설정

Ctrl + Shift + F2 // 북마크 해제


찾기

Ctrl + F // 찾기

F3 // 현재 커서 다음 위치에서 찾음

Shift + F3 // 현재 커서 이전 위치에서 찾음

Ctrl + H // 찾아서 바꾸기(단어바꾸기)

Ctrl + i // 아래 방향으로 단어 찾기

Ctrl + Shift + i // 위 방향으로 단어 찾기

Ctrl + F3 // 선택한 문자열 찾기(커서 다음)

Ctrl + Shift + F3 // 선택한 문자열 찾기(커서 이전)

디버깅

F5 // 디버깅시작, 다음브레이크포인트까지 실행

F9 // breakpointer

Ctrl + Shift + F9 // 모든 브레이크 포인터 해제

F10 // 한줄씩 실행

F11 // 함수프로시저안까지 실행

Shift + F5 // 디버깅 종료

빌드, 실행

F7 // 빌드

Ctrl + Break // 빌드 중지

Ctrl + F5 // 디버깅하지 않고 실행

Ctrl + F7 // 빌드, 컴파일

출처 : http://blog.naver.com/nottrue33/30102691307
PDF 파일

'윈도우 > 참고' 카테고리의 다른 글

리버스 엔지니어링 예제  (0) 2011.11.23
Visual Studio C++ 2010 단축키  (0) 2011.11.23
Visual Studio C++ 2008 단축키  (0) 2011.11.23
Visual Studio C++ 2005 단축키  (0) 2011.11.23
error LNK2019  (0) 2011.11.21
The connection with the server was reset  (0) 2011.11.18
posted by Town One townone

댓글을 달아 주세요

2011.11.23 10:33 윈도우/참고

 

단축키
설명
Ctrl + Shift + N
프로젝트 새로 만들기
Ctrl + N
파일 새로 만들기
Ctrl + Shift + O
프로젝트/솔루션 열기
Ctrl + O
파일 열기
Ctrl + S
저장
Ctrl + Shift + S
모두 저장
Ctrl + P
인쇄
Ctrl + Z
Undo
Ctrl + Y
Redo
Ctrl + X
Cut
Ctrl + C
Copy
Ctrl + V
Paste
Ctrl + Shift + Ins
클립보드 링 순환
Del
Delete
Ctrl + A
Select All
Ctrl + F
Find
Ctrl + H
Replace
Ctrl + Shift + F
파일에서 찾기
Ctrl + Shift + H
파일에서 바꾸기
Ctrl + Shift + Y
기호 찾기
Ctrl + G
Go To
Ctrl + K, Ctrl + F
선택 영역 서식
Ctrl + Shift + U
대문자로
Ctrl + U
소문자로
Ctrl + K, Ctrl +
가로 공백 삭제
Ctrl + R, Ctrl + W
공백 보기
Ctrl + E, Ctrl + W
자동 줄 바꿈
Ctrl + I
증분 검색(Incremental Search)
Ctrl + K, Ctrl + C
선택 영역을 주석으로 처리
Ctrl + K, Ctrl + U
선택 영역의 주석 처리 제거
Ctrl + K, Ctrl + K
책갈피 설정/해제
Shift + F2
이전 책갈피
F2
다음 책갈피
Ctrl + K, Ctrl + L
책갈피 지우기
Ctrl+Shift+K, Ctrl+Shift+P
폴더의 이전 책갈피
Ctrl+Shift+K, Ctrl+Shift+N
폴더의 다음 책갈피
Ctrl + K, Ctrl + H
작업 목록 바로 가기 추가
Ctrl + M, Ctrl + H
선택 영역 숨기기
Ctrl + M, Ctrl + M
개요 확장/축소
Ctrl + M, Ctrl + L
전체 개요 표시/숨기기
Ctrl + M, Ctrl + P
개요 표시 중지
Ctrl + M, Ctrl + U
현재 숨기기 중지
Ctrl + M, Ctrl + O
정의 부분만 보이기
Ctrl + J
멤버 목록
Ctrl + Shift + SpaceBar
매개 변수 목록
Ctrl + K, Ctrl + I
요약 정보
Alt +
단어 자동 완성
Ctrl + Alt + 0
코드
Ctrl + Alt + L
솔루션 탐색기
Ctrl + K, Ctrl + W
책갈피 창
Ctrl + Shift + C
클래스 뷰
Ctrl + Shift + V
코드 정의 창
Ctrl + Alt + J
개체 브라우저
Alt + 2
출력
Ctrl + Shift + E
리소스 뷰
Ctrl + Alt + X
도구 상자
Shift + Alt + Enter
전체 화면
Ctrl + -
뒤로 탐색
Ctrl + Shift + -
앞으로 탐색
Ctrl + Alt + Y
기호 찾기 결과
Ctrl + Alt + A
명령 창
Ctrl + Alt + D
문서 개요
Ctrl + , Ctrl + E
오류 목록
Alt + Enter
속성 창
Ctrl + Alt + S
서버 탐색기
Ctrl + , Ctrl + T
작업 목록
Ctrl + Alt + R
웹 브라우저
Ctrl + Shift + A
새 항목 추가
Shift + Alt + A
기존 항목 추가
Alt + F7
속성
F7
솔루션 빌드
Ctrl + Alt + F7
솔루션 다시 빌드
Ctrl + F7
컴파일
Alt + F9
중단점 창 보이기
Ctrl + Alt + I
직접 실행 창 보이기
F5
디버깅 시작
Shift + Alt + F5
응용 프로그램 검증 도구로 시작
Ctrl + F5
디버깅하지 않고 시작
Ctrl + Alt + E
예외
F11
한 단계씩 코드 실행
F10
프로시저 단위 실행
F9
중단점 설정/해제
Ctrl + Shift + F9
모든 중단점 삭제
Ctrl + B
함수에서 중단
Ctrl + Alt + P
프로세스에 연결
Ctrl + K, Ctrl + B
코드 조각 관리자
Ctrl + Shift + P
TemporaryMacro 실행
Ctrl + Shift + R
TemporaryMacro 저장
Alt + F11
매크로 IDE
Ctrl + F1
어떻게 할까요?
Ctrl + Alt + F3
검색
Ctrl + Alt + F1
목차
Ctrl + Alt + F2
색인

Visual Assist 단축키
단축키
설명
Alt + Shift + O
Open File in Workspace
Alt + O
Open Corresponding .h or .cpp
Alt + M
List Methods in Current File(현재 파일의 모든 함수 목록)
Shift + Alt + S
Find Symbol
Alt + G
Go to Implementation(현재 커서의 함수 정의 부분으로 이동)
Ctrl + Shift + V
클립보드에서 선택해서 붙여 넣기(Multiple Clipboards)
Alt +
Navigate Back(이전 커서 위치로 이동)
Alt +
Navigate Forward(다음 커서 위치로 이동)
Alt +
Move to the previous method
Alt + ↓
Move to the next method
PS. VS2005 단축키는 대부분 VS2008에서도 작동 됩니다.

원문 : http://kindtis.tistory.com/7

'윈도우 > 참고' 카테고리의 다른 글

리버스 엔지니어링 예제  (0) 2011.11.23
Visual Studio C++ 2010 단축키  (0) 2011.11.23
Visual Studio C++ 2008 단축키  (0) 2011.11.23
Visual Studio C++ 2005 단축키  (0) 2011.11.23
error LNK2019  (0) 2011.11.21
The connection with the server was reset  (0) 2011.11.18
posted by Town One townone

댓글을 달아 주세요

2011.11.21 11:48 윈도우/참고
* error LNK2019 링크 오류가 났을때 체크 사항

ex)
1>CxImageD.lib(ximapng.obj) : error LNK2019: _png_read_end 외부 기호(참조 위치: "public: bool __thiscall CxImagePNG::Decode(class CxFile *)" (?Decode@CxImagePNG@@QAE_NPAVCxFile@@@Z) 함수)에서 확인하지 못했습니다.

1) 추가 종속성에 LIB 링크 했는지 확인

속성페이지에서 추가 종속성에 lib 파일을 링크 했는지 확인 한다.
또는 아래와 같이 직접 소스에 링크 하는 방법도 있다.

#ifdef _DEBUG
#pragma comment(lib, "CxImageD.lib")
#else
#pragma comment(lib, "CxImage.lib")
#endif


* 각 라리브러리가 프로젝트로 되어 있다면 추가 종속성에 추가 할 필요 없고 프로젝트 종속성을 맞춰 주면 자동으로 링크 된다. 이런 경우에도 가끔 LNK2019 오류가 발생 한다.

2) 프로젝트에 헤더 파일(~.h)과 구현 파일(~.cpp)을 추가 했는지 확인

3) 함수 선언 하고 구현 하지 않았는지 확인

*4) inline 이나 template 을 사용할 경우 헤더와 구현을 다른 파일로 분리 하였는지 확인
    - 분리하지 말고 하나의 파일로 구현 한다. 
    - 실제 오류는 다른 파일에 있다.

5) c 또는  cpp 처럼 확장자가 다른지 확인
    - 확장자를 하나로 통일 시킨다.


참고 : http://sadiles.blog.me/10072075057

'윈도우 > 참고' 카테고리의 다른 글

리버스 엔지니어링 예제  (0) 2011.11.23
Visual Studio C++ 2010 단축키  (0) 2011.11.23
Visual Studio C++ 2008 단축키  (0) 2011.11.23
Visual Studio C++ 2005 단축키  (0) 2011.11.23
error LNK2019  (0) 2011.11.21
The connection with the server was reset  (0) 2011.11.18
posted by Town One townone

댓글을 달아 주세요

2011.11.18 10:45 윈도우/참고
사내 방화벽 솔루션에 막힌 경우 가끔 위와 같은 메시지가 뜬 경우가 있다.
이런 부분은 대부분 회사내에 구축된 침입 차단 시스템에 의해서 차단된 경우이다.

침입 차단 시스템(侵入遮斷 - , 영어: Intrusion Prevention Systems (IPS), Intrusion Detection and Prevention Systems (IDPS))은 외부 네트워크로부터 내부 네트워크로 침입하는 네트워크 패킷을 찾아 제어하는 기능을 가진 소프트웨어 또는 하드웨어이다. 일반적으로 내부 네트워크로 들어오는 모든 패킷이 지나가는 경로에 설치되며, 호스트IP주소, TCP/UDP포트번호, 사용자 인증에 기반을 두고 외부 침입을 차단하는 역할을 한다. 허용되지 않는 사용자나 서비스에 대해 사용을 거부하여 내부 자원을 보호한다.

이런 경우가 발생되면 사내 네트웍 관리자에게 문의 하여야 한다.

'윈도우 > 참고' 카테고리의 다른 글

리버스 엔지니어링 예제  (0) 2011.11.23
Visual Studio C++ 2010 단축키  (0) 2011.11.23
Visual Studio C++ 2008 단축키  (0) 2011.11.23
Visual Studio C++ 2005 단축키  (0) 2011.11.23
error LNK2019  (0) 2011.11.21
The connection with the server was reset  (0) 2011.11.18
posted by Town One townone

댓글을 달아 주세요