블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
VS 프로젝트 설정 (40)
TortoiseSVN (4)
Excel (5)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

조치 방법은 일단 visual Studio IDE 를 삭제하고 다시 설치하는 방법이 있구요..(최악의 방법이자 뒷탈없는 방법이죠.)

 

다음으로는 Visual Studio IDE를 리셋 하는 방법입니다..

관련정보는 http://www.microsoft.com/korea/msdn/library/ko-kr/bb245788(vs.80).aspx

  • Visual Studio 2005의 인스턴스를 모두 종료합니다.
  • 시작을 클릭하고 실행...을 선택합니다.
  • "devenv.exe /resetuserdata"를 입력합니다.
이 명령을 사용하면 몇 분 동안 Visual Studio가 정리되고 처음 상태로 설정됩니다. 이때 작업 관리자를 열어 devenv.exe 프로세스가 실행 중인지 여부를 확인할 수 있습니다. 실행이 종료되면 Visual Studio를 다시 시작할 수 있습니다. 그러면 컴퓨터에서 Visual Studio를 처음으로 실행할 때처럼 처음 실행 대화 상자가 다시 표시됩니다.

반응형
Posted by blueasa
, |

원문 : http://support.microsoft.com/default.aspx?scid=kb%3Bko%3BKR601474 )

 

 

기술 자료 ID : 601474
마지막 검토 : 2000년 1월 9일 일요일
수정 : 1.0
이 문서는 이전에 다음 ID로 출판되었음: KR601474

요약

어플리케이션을 릴리즈 모드로 Build 할 때 디버깅 정보를 남기어서 VC++ Debugging Tool에서 디버깅을 가능하게 합니다. 이 방법을 사용하는 경우, 실제 릴리즈 실행 파일은 거의 영향 받지 않으면서, Debugger 에서 Break Pointer를 잡거나, Trace를 가능하게 하므로, Release mode에서만 발생하는 Bug를 추적할 때 용이하게 사용할 수 있습니다.

추가 정보

이 방법을 사용하게 되면 _DEBUG free define으로 포함되는 디버깅 매크로는 포함되지 않으나, Source code안으로 Step in 가능하게 하는 디버깅 정보들은 OBJ와 PDB file에 남게 됩니다. 이를 이용하게 되면 VC++ IDE 환경에서 source level 까지의 step in이 가능해 집니다.
다음은 VC++ 6.0의 프로젝트에서 Debugging Information를 Enable하는 방법입니다.
1. Project를 open 한 뒤 menu Project/Settings 를 선택합니다.
2. Settings For를 Win32 Release로 선택합니다.
3. C/C++ tab에서 category를 General로 선택하고 Debug info를 Program Database로 선택합니다.
4. Link tab에서 category를 General로 선택하고 Generate debug info를 check합니다.
5.

Rebuild All를 실행하여서 프로그램을 다시 Build 합니다. 이제 디버깅 하고자 하는 위치에 Break Pointer 를 잡고Go를 실행하면, 디버깅을 진행할 수 있습니다.

 

 

 

*********************************************************************************************

자자.. 위에꺼는 2000년도에 마소에서 나온 문서이다. 2000년도라면 VC++ 6.0을 사용하던 시기..

지금은 몇 년도? 2007년도.. VC++은 얼마? 2005.. 흠.. 상당한 시간이 흐르고, VC++도 엄청난 변화를

격었기에 위와같이 설정을 해주면 컴파일이 안 된다. 그래서 2005에 맞게 수정하겠다. ^^

 

 

위 그림과 같이 "메뉴 -> 프로젝트 -> 속성 -> 구성 속성 -> C/C++ -> 일반" 으로 이동을 한다. 그리고 맨위 왼쪽 구성은 Release로 한다.

그리고 디버깅 정보 형식은 "편집하며 계속하기를 위한 프로그램 데이터베이스(/ZI)" 로 변경한다.

그리고 "메뉴 -> 프로젝트 -> 속성 -> 구성 속성 -> C/C++ -> 최적화"로 가서 "속도 최대화(/O2)"에서 "사용 안 함"으로 설정.

그리고 "메뉴 -> 프로젝트 -> 속성 -> 구성 속성 -> C/C++ -> 전체 프로그램 최적화"로 가서 "링크 타임 코드 생성 사용(/GL)""사용 안 함"으로 설정한다.

 

저렇게 설정하고 다시 컴파일 한 후 릴리즈 모드로 디버깅을 하거나 덤프 파일을 읽으면 일반 디버깅과 똑같이 파일 정보를 읽을 수 있다.


출처 : http://nsjokt.springnote.com/pages/3539747

반응형
Posted by blueasa
, |

 작성자 : 정동헌

 작성일 : 02.03.21


 주요 내용

 1. 디버깅 옵션의 의미.

 2. 디버깅 런타임 라이브러리 사용시의 특징.

 3. 릴리즈 모드에서 디버깅하기.

 4. Watch 윈도우에서 "Register", "Pseudo-register"값 확인하기.

 5. Watch 윈도우에서 변수값을 변수 타입을 구체적으로 정하여 값 확인하기.


Compiler options for finding Bugs

Compiler Options

의미

/W4

Warning Level을 최대로 하여 컴파일

( 모든 빌드 타입에 가능 )

/D "_DEBUG"

Assetion, Trace 같은 디버깅용 코드가 컴파일시 포함되록 만든다.

 ( 디버그 빌드에서만 )

/GZ

생성시에 초기화 되지 않는 변수를 특정 값으로 채워 놓아서 흔히 디버그에서는 나타나지 않고 릴리즈 빌드에서 나타나는 에러를 사전에 검사할 수 있게 하여 디버그에 도움이 되게 함. ( 디버그 빌드에서만 )

/Od

최적화하지 않는다. 코드를 디버그에 적합하게 만든다.

( 디버그 빌드에서만 )

/GF

실행 파일에 들어갈 스트링이 중복될 경우 이를 제거, 공동으로 사용되는 이 스트링이 할당된 메모리를 읽기 전용으로 설정하여 우발적인 메모리 쓰임으로 부터 보호함.

 char *s = "This is a character buffer";

 char *t = "This is a character buffer";

 위와 같은 경우 같은 스트링이므로 스트링을 서로 공유 함.

( 릴리즈 모드에서 명시적으로 사용시 )

/Gf

실행파일에 들어갈 스트링을 공유하는 것은 위와 같으나 우발적인 메모리 쓰임으로 부터 보호 하지 않음.

/ZI

디버깅 심벌용 프로그램 데이터베이스를 만듬.

디버그로 실행시에 코드를 편집후 연속해서 디버깅이 가능하게 정보를 관리.

( 디버그 빌드에서만 )

/Zi

디버깅 심벌용 프로그램 데이터베이스를 만듬.

( 릴리즈 빌드에서만 )

Compiler options for a debug build

Linker Options

의미

/MDd, /MLd, /MTd

디버그 실시간 라이브러리 사용.

/Od

최적화하지 않는다.

/D "_DEBUG"

디버그용 코드가 컴파일 되게 한다.

/ZI

편집, 연속 디버깅이 가능하게 디버그용 데이터배이스를 만듬.

/GZ

디버그 빌드에서의 흔한 실수로 릴리즈에서 나타나는 에러를 디버그모드에서 검출.

/Gm

빌드 시간을 재빌드시에 감축시키기.

Compiler options for a release build

Linker Options

의미

/MD, /ML, /MT

릴리즈 실시간 라이브러리 사용.

/O1 or /O2

속도 최적화나 사이즈 작게 최적화 같은 것을 가능하게.

/D "NDEBUG"

디버그용 코드가 컴파일되지 않게 함.

/GF

중복된 문자열을 방지, 읽기 전용으로 데이터를 보호함.

디버그 런타임 라이브러리 사용.


 - 디버그 런타임 라이브러리는 메모리 할당을 추적하고 메모리 누수를 점검한다.

 - 새로이 메모리 할당되어 초기화 되지 않은 데이터에 "0XCD"의 바이트 패턴으로 써놓는다.

 - 메모리 할당이 해제될 경우에 “0XDD"의 바이트 패턴으로 표시를 하여 해제된 메모리라고 알 수 있도록 표시한다.

 - 할당된 메모리 버퍼의 양쪽 끝 부분에 DWORD 사이즈로 “0XFD"의 바이트 패턴으로 표시를 해둬서 memory overwrite나 memory underwrite를 체크할 수 있게 한다. ( 즉 디버그 모드에서는 메모리 할당시에 양쪽에 각각 DWORD의 공간이 마킹하기 위해서 추가적으로 할당이 된다. )

 - 메모리 할당시 소스코드 상에서의 위치를 알아 내는데 도움이 되도록 소스코드의 파일 이름과 해당줄을 추적을 위해서 넣어 놓는다.


디버그 빌드에서 릴리즈 빌드 에러를 검출하기.

 “/GZ" 컴파일러 옵션을 삽입시,

 1. 초기화되지 않은 포인터에 대한 접근 위반을 검출하기 위해 "0XCC“ 패턴으로 자동적으로 변수를 초기화 함.

 2. 비주얼 C++은 디버그 모드에서는 모든 변수를 자동적으로 0로 초기화하고 릴리즈 모드에서는 그렇지 않는다. 이것은 컴파일러가 하는 일중에 가장 허접한 것이다. 이것으로 릴리즈 모드에서 예상하지 못한 에러를 만날 수 있다. 그러나 “/GZ"라는 컴파일 옵션을 주면 모든 변수를 ”0XCC"로 초기화 함으로써 이를 방지할 수 있다.



 릴리즈 모드에서 디버깅하기


 1. “Project/Settings/"을 선택하여 프로젝트 세팅 다이알로그를 띠운다.


 2. ”C/C++“ 탭에서 ”General" 카테고리를 선택해서 "Optimizations"을 “Disable(Debug)"로 선택하고 “Debug info" 항목을 ”Program Database“로 바꾼다.

3. "Link" 탭에서 “Debug" 카테고리를 선택하면 ”Debug info" 항목이 있는데 여기서 "Microsoft format"을 선택한다.

4. “Link" 탭에있는 ”Project Options" 박스에 들어 있는 내용의 맨 끝에 "/OPT:REF"를 추가 한다.

5, 반드시 “Rebuild All"로 제 컴파일을 한다.


Note : Vs 7.0 (.Net )에서의 설정 방법.. (한글판 기준)

 1. C/C++에서 일반 항목중에서, 디버깅 정보 형식을 “사용안함"에서 “편집하며 계속하기를 위한 프로그램 데이터베이스(/ZI)"로 변경.

 2. C/C++에서 최적화 항목중에서, 최적화를 “속도최대화(/O2)”에서 “사용안함(/Od)"로 변경.

 3. C/C++에서 최적화 항목중에서, 인라인 함수 확장을 “__inline(/Ob1)" 에서              사용 안함으로 변경.

 4. 링커에서 디버그 항목중에서, 디버그 정보 생성을 “아니요”에서 “예(/DEBUG)"로 변경. 


 ** 디버깅 후에는 꼭 설정을 되돌려놔야 한다.


Registers And Pseudo-registers

Register값은 “Registers" 윈도우에서 확인이 가능하지만 단순하고 값만을 알수 있다. 이 값들을 ”Address(Watch)" 박스에서도 확인이 가능하며 여러 부가 기능과 같이 쓸수 있다.

 예를 들어 EAX의 값을 확인 해볼려고 하면 Watch 항목에 “@EAX"혹은 ”@eax"와 같이 대소문자를 구분하지 않고 넣으면 이 래지스터의 값을 확인 할 수 있다.

 또한 Pseudo-register"의 값또한 확인 할수 있는데. "@ERR"의 Pseudo-register 값은 매우 유용하게 사용할 수 있는데 이 값이 GetLastError의 값을 나타내기 때문이다. 만약 “@ERR,hr"이라고 입력한다면 Win32의 에러코드에 해당하는 택스트를 보여 줄것이다.

Pseudo-register

의미

@ERR

GetLastError API로 알 수 있는 가장 최근에 반환된 에러 코드를 보여줌

@CLK

누적시간(MicroSecond)을 보여줌.

@TIB

TIB의 주소를 보여줌.

Registers that Watch and Memory windows support




Pseudo-registers that the Watch window supports

Register

사용(용도)

@EAX

일반 용도, 함수의 return 값으로 사용

@EBX

일반 용도

@ECX

일반 용도, 오브젝트의 this 포인터로 사용.

@EDX

일반 용도, 64비트의 return값의 경우 상위 값의 반환에 사용.

@ESI

메모리 이동과 비교 연산시의 원본 메모리

@EDI

메모리 이동과 비교 연산시에 대상 메모리

@EIP

명령 포인터 ( 코드의 현제 위치 )

@ESP

스텍 포인터 ( 스텍의 현제 위치 )

@EBP

스텍 배이스 포인터 ( 현제 스텍 프레임의 바닥 )

@EFL

비교나 수학 연산을 위한 플래그 비트

@CS

Code segment

@SS

Stack segment

@DS

Data segment

@ES

Extra segment

@FS

Another extra segment, used to point to the TIB

@GS

Yet another extra segment

Watch Window Formatting Symbols

이 윈도우는 변수의 값을 볼수 있게 해주는데, 값을 십진수나 16진수로서 확인할 수 있다. 16진수는 팝업 메뉴에서 “Hexadecimal Display"를 선택하면 볼수 있다. 이 이외에도 여러 가지 옵션을 주어서 사용할 수 있는데 이들은 Watch Window에 등록되는 변수명 뒤에 ","를 삽입하고 그뒤에 옵션을 주어 사용할 수 있다.


Symbol

Format

Example

Output

d, i

부호있는 10진 정수

-42,d

-42

u

부호없는 10진 정수

42,u

42

o

부호없는 8진 정수

42,o

052

x

16진 정수

42,x

0x0000002a

X

16진 정수

42,X

0x0000002A

h

Short prefix for d,i,u,o,x

42,hx

0x002a

f

실수

1.5,f

1.500000

e

부호 있는 과학용 표기

1.5,e

1.500000e+000

g

Compact float

1.5,g

1.5

c

문자

42,c

'*'

s

ANSI 문자열

"bugs",s

"bugs"

su

UNICODE 문자열

"bugs",su

"bugs"

st

기본 문자열형 ( s, su중에서 )

"bugs",st

"bugs"

hr

HRESULT, Win32 error code

0x06,hr

The handle is invaid

wm

Wndows message number

0x01,wm

WM_CREATE

[digits]

배열

s,5

배열 5개의 항목 표시



반응형
Posted by blueasa
, |

속성 -> 링커 -> 최적화 -> 참조 -> 참조하지 않는 데이터 제거

옵션이 켜있다면 말그대로 참조하지 않는 함수도 제거되는데, 만약 아무곳에서도 참조되지 않는 함수에 브레이크 포인트를 걸어놓는다면 디버깅시 비활성화 된다.

때문에 브레이크 포인트가 비활성화 된다면 이것도 염두에 두어야 한다
안그럼 삽질..
반응형
Posted by blueasa
, |

보통 '옵션->디버깅->일반->소스 파일이 원래 버전과 정확하게 일치해야 함' 이 옵션을 제거하면 되는데 그렇게도 되지 않을때가 종종 있다.
1.70 [서명 없는 UTF-8 인코딩 자동 검색] 옵션이 꺼져 있는 Visual Studio 편집기에서 소스 파일에 가비지 값이 보이는 경우가 있을 수 있습니다.
Visual Studio 에서, [도구]->[옵션]->[텍스트 편집기]->[일반]의 [서명 없는 UTF-8 인코딩 자동 검색] 옵션이 기본으로 꺼져 있습니다. [서명 없는 UTF-8 인코딩 자동 검색] 옵션이 꺼져있는 컴퓨터에서는 서명 없는 UTF-8 형식의 파일을 기본 코드 페이지로 열는 경우가 있기 때문에, 편집기에서 가비지가 보일 수 있습니다.

이 문제를 해결하려면

1. [도구]->[옵션]->[텍스트 편집기]->[일반]을 선택한 후 [서명 없는 UTF-8 인코딩 자동 검색] 옵션을 켜십시오. 이 후에도 이 문제가 발생하지 않습니다. 참고. [서명 없는 UTF-8 인코딩 자동 검색] 옵션을 켤 경우, UTF-8 영역과 한국어 (ks_c_5601-1987) 영역에 중복되어 있는 문자들만 파일에 포함되어 있을 경우 서명 없는 UTF-8 파일을 한국어 파일로 잘못 인식하여 가비지가 발생할 수 있습니다.
2. 혹은 해당 파일을 [다른 이름으로 저장]-> [인코딩하여 저장]을 선택하여 서명 있는 UTF-8 파일 형식으로 바꿀 수 있습니다.
내 경우엔 1번 방법으로는 해결되지 않았고 2번으로 해결이 됐었다.
아래 링크를 가보면 여러가지 이슈들이 많다

Microsoft Visual Studio 2005 사용 시 발생하는 문제

반응형
Posted by blueasa
, |

마소에서 소개한 방법입니다.
   
    1.  Win32  Release로  선택한  후 Settings에서 C/C++ 탭을 선택한 후 Debug
    info 를 프로그램 데이터베이스로 선택합니다.
   
    2. 링크 탭에서 Generate debug info를 선택한 후 Rebuild All한 다음 디버그
    처럼 F10, F11키를 적절히 사용해 보세요. 디버깅을 할 수 있을 겁니다.
    
    
   
최적화 기능을 사용하지 않는 릴리즈 컴파일 방법
   
    프로젝트의   Settings을   선택한   후   ,  C/C++탭을  선택하면  우측편에
    Optimizations가 있습니다. 이것을 Disable(Debug)로 선택하면 됩니다.    
반응형
Posted by blueasa
, |

다음은 릴리즈 모드로 빌드해서 코드내에 브레이크 포인트를 거는등의 디버깅 방법을 소개한 것이다.


 

먼저 project menu의 setting에서 C/C++ tap을 선택하고 'Optimaizations'를 Disable로 선택한다. 그리고 그 아래 'Debug info'를 'Program Database'로 선택한다. 

그리고 Link탭에서 Generate debug info를 check한다. 

자, 준비는 다 되었다. 이제 릴리즈 모드에서 코드내에 브포를 걸고 디버깅을 할 수 있게 되었다. 

위의 지시대로 셋팅하고 빌드했는데 'precompiled type information not found'라며 에러가 난다면 Build메뉴로 가서 Rebuild를 선택해보면 에러없이 빌드 할 것이다.


 

주의할 점은 디버깅이 끝나고 다시 패키지를 릴리즈 할 때는 위의 셋팅했던 것들을 원래데로 복원시켜서 재빌드해야 한다. 즉, Optimization을 'Maximize Speed' 로 바꾸고 Debug Info를 'None'으로, Generate Debug Info를 uncheck하는 것을 잊지 않도록 한다. 

반응형
Posted by blueasa
, |

/FIXED[:NO]

설명

/FIXED 옵션을 사용하면 운영 체제에서는 기본 설정 기준 주소에서만 프로그램을 로드하게 됩니다. 기본 설정 기준 주소를 사용할 수 없으면 파일이 로드되지 않습니다. 자세한 내용은 /BASE(기준 주소)를 참조하십시오.

기본적으로 DLL을 빌드할 때는 /FIXED:NO가 기본값이 되고 다른 모든 프로젝트 형식에 대해서는 /FIXED가 기본값이 됩니다.

/FIXED를 지정하면 LINK에서는 프로그램에 재배치 섹션을 생성하지 않습니다. 런타임에 운영 체제가 해당 주소에서 프로그램을 로드할 수 없으면 오류 메시지가 표시되며 프로그램은 로드되지 않습니다.

프로그램에 재배치 섹션을 생성하려면 /FIXED:NO를 지정합니다.

Windows NT용 장치 드라이버를 빌드할 때는 /FIXED를 사용하지 마십시오.

Visual Studio 개발 환경에서 이 링커 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual C++ 프로젝트 속성 설정을 참조하십시오.

  2. 링커 폴더를 클릭합니다.

  3. 명령줄 속성 페이지를 클릭합니다.

  4. 추가 옵션 상자에 옵션을 입력합니다.

프로그래밍 방식으로 이 링커 옵션을 설정하려면

반응형
Posted by blueasa
, |

/FORCE:[MULTIPLE|UNRESOLVED]

설명

/FORCE 옵션을 사용하면 링커에서는 기호가 참조되어 있지만 정의되어 있지 않은 경우나 여러 번 정의되어 있는 경우에도 올바른 .exe 파일 또는 DLL을 만듭니다.

/FORCE 옵션에는 다음과 같이 선택적 인수를 사용할 수 있습니다.

  • /FORCE:MULTIPLE을 사용하면 LINK에서 기호에 대한 정의를 하나 이상 찾더라도 출력 파일을 만들 수 있습니다.

  • /FORCE:UNRESOLVED를 사용하면 LINK에서 정의되지 않은 기호를 찾더라도 출력 파일을 만들 수 있습니다. 진입점 기호가 확인되지 않으면 /FORCE:UNRESOLVED는 무시됩니다.

/FORCE에 인수를 사용하지 않으면 MULTIPLE과 UNRESOLVED를 모두 의미합니다.

이 옵션을 사용하여 만든 파일이 예상대로 실행되지 않을 수도 있습니다. 링커에서는 /FORCE 옵션이 지정된 경우 증분 링크를 수행하지 않기 때문입니다.

/clr를 사용하여 모듈을 컴파일하는 경우 /FORCE를 지정해도 이미지가 생성되지 않습니다.

Visual Studio 개발 환경에서 이 링커 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual C++ 프로젝트 속성 설정을 참조하십시오.

  2. 링커 폴더를 클릭합니다.

  3. 명령줄 속성 페이지를 클릭합니다.

  4. 추가 옵션 상자에 옵션을 입력합니다.

프로그래밍 방식으로 이 링커 옵션을 설정하려면

반응형
Posted by blueasa
, |
현재 전 Dina 폰트, 크기 8로 쓰고 있습니다.

흰색이 눈아파서 아래 배경으로 바꿔봤는데 눈 부담이 덜하네요.

좀 써봐야지..

배경 RGB : 226, 234, 245

출처 : http://www.gamecodi.com/board/zboard.php?id=GAMECODI_Talk&page=1&sn1=&divpage=2&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=6299
반응형
Posted by blueasa
, |