ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Visual C++ 6.0 Tip
    Programming/C 2015. 2. 3. 16:28

    출처 : Catch22.net 튜토리얼 페이지 [원문링크]

    Visual C++ 6.0을 만질일이 없을줄만 알았다. 근데 아니다-_-

    코드 편집기 색상 편집을 쉽게 하려고 구글링을 하던 도중 좋은 문서를 하나 발견해서 여기에 번역해 올린다. ...허가는 안 받았지만 ... 그건 나중에... 




    이 문서는 Visual C++과 관련하여 인터넷에서 찾아보기 어려운 극강 팁앤텍을 서술한다. 대부분의 팁들은 .NET에서도 그대로 동작할 것이며, 모든 팁이 다 유용하게 쓰일 것이다. 시간 내어 한번 읽어 볼만 하다. 짧은 항목은 번역을 안 했으므로 그냥 읽으시오.

    1. 디버그 빌드는 되는데, 릴리즈 빌드가 안된다?

    프로그래밍 포럼과 유즈넷에서 가장 큰 지분율을 차지하는 질문이다. 대답은 간단하다. "니 코드 버그부터 고쳐라!!!". 아마 대부분의 문제는 초기화 되지 않은 변수 때문에 일어날 것이다. 이런 문제는 원래 디버그 빌드나 릴리즈 빌드나 에러가 나야 하는데, 우리 관대한 VC++은 디버그 빌드의 에러는 조금 용납을 해 주신다. 따라서, 코드를 먼저 살펴 보자.
     

    2. 인텔리전스와 관련된 문제

    Visual Studio의 "가장 짜증나는 특장점"이 바로 이 인텔리전스다. 인텔리전스가 멈춰 버리면 일단 VS를 끄고, 작업 디렉토리로 가서 .ncb 파일을 삭제하자. 그리고 다시 프로젝트를 불러 Rebuild를 하면 끗.
     

    3. 들여쓰기 자동정리

    정리하고 싶은 코드를 선택한 다음 Alt+F8을 눌러 보자. 그러면 마법과도 같은 일이 일어난다ㅋㅋ

     

    4. 커스텀 키워드 정의하기

    VC++은 개발자가 정의한 키워드를 syntax-highlight 해 주는 기능을 지원한다. 옵션 창에서 정의하면 되는데, 어떻게 하는지 모르겠다.

    일단 usertype.dat 파일을 새로 생성한다. c:\program files\Microsoft Visual Studio\Common\MSDev98\Bin 디렉토리 아래에 저장하고, 원하는 키워드를 정의하면 된다. 샘플은 [여기]를 클릭하여 살펴 보자.


    5. 코드 편집기 색상 임의 지정하기

    오오미 드디어 찾던 자료!ㅋㅋㅋ

    regedit 열어서 

    HKCU\Software\Microsoft\Devstudio\6.0\Format\Source Window\

    로 탐색해 들어가면 바이너리 타입의 항목이 여러 개 있을 거다. 다 똑같은 형태로 되어 있다 
    첫 4바이트는 전경색이다. RGB포맷으로 3바이트, 패딩으로 1바이트. 그 다음 4바이트는 배경색이다. 

     [ RR GG BB xx ][ RR GG BB xx ]
        Foreground     Background

    이 항목을 "내보내기" 시켜서 다른 컴퓨터에 적용시키면 똑같은 환경 구ㅋ축ㅋ

    6. 열단위 선택하기

    선택할 때 ALT 키 누르긔 ㅋ








    7. 구조체 멤버 탐색

    CTRL+SPACE. 


    8. 함수 전달인자 보기

    인자 설명을 보고자 할 땐, CTRL+SHIFT+SPACE.


    9. 어셈블 코드 보기

    디버깅 도중 ALT+8을 누르면 Assembler 모드로 토글한다.


    10. 선언문 보기

    VC++은 이클립스가 아니다. 잘 안되더라.. 우클릭 해서 "Goto Definition Of..."를 누르면 에러창이 하나 뜨면서, "Yes"를 누르면 프로젝트를 인덱싱하며 재빌드할 것이다. 진작 하든가..-_- 그 후에 다시 우클릭해서 탐색 하면 된다.


           

    11. 코드에 즐겨찾기 (읭!?)

    즐겨찾기 하고싶은 줄에서 Ctrl+F2를 누르자. 여러 라인에 즐겨찾기 가능하고, F2로 탐ㅋ색ㅋ





     

    12. 호출 순서 보기

    함수 이름에 커서를 놓은 후, ALT+F12를 눌러 보자. 인덱싱이 되어 있다면 창이 하나 뜰 것이다. 거기서 CallGraph를 선택하면, 이 함수가 어떤 순서로 호출되는지를 볼 수 있다. 우왕ㅋ굳ㅋ


    13. 소스 탐색 졸라 빨리 하기

    이건 비단 VC++에서만 되는 건 아니고, 거의 모든 편집기란 편집기는 다 되는거. Ctrl 누르고 좌우로 탐색하기.. 이거 모르는 사람도 있남-_-

    14. 괄호 짝찾기

    {, [, ( 같은 녀석들의 짝을 찾고 싶다면, 해당 괄호에 커서를 두고 CTRL+] 를 눌러보자. 우왕ㅋ굳ㅋ

    15. 공백문자 표기 토글

    Press CTRL+SHIFT+8 to show / hide whitespace markers.

     

    16. 헤더 파일 열기.

    코드 내에 표시된 파일명에 우클릭 후 "Open Document" 를 누르면 바로 그 파일을 열 수 있다.


    17. Platform SDK 설치

    플랫폼 SDK는 기존 SDK를 덮어씌우기보단 쉽게 기억할 수 있는 폴더에 설치해 두고 Directories를 바꿔주는 것이 좋다. 오른쪽 그림처럼...

    만약 자신이 SDK를 C:\MSVS\SDKxxx\에 설치했다면, Tools->Options의 Directories탭에 들어가서 아래의 디렉토리를 추가한 후 우선순위를 가장 상위로 올린다.
    C:\MVSYS\SDKxxx\Include  -> Include files
    C:\MVSYS\SDKxxx\Lib -> Libraries

    이렇게 하면 기존 SDK를 보존하면서도 최신 SDK를 이용해서 컴파일을 수행할 수 있다. 만약 해당하는 함수가 새로운 SDK에 없다면 VS는 자동으로 그 다음 우선순위 디렉토리의 헤더를 참조할 거다.

    19. 키보드랑 윈도우 레이아웃 설정 보존하기

    Visual Studio's keyboard and layout settings are stored in the following locations:

     HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Keyboard
    

     HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Layout
    

    Use REGEDIT to Export these registry locations to an external file, then simply Import the settings when you need them on any new machine.


     

    19. MAP파일

    MAP파일이라는게 있나 보다. 전역변수와 함수들이 어떤 심볼로 바이너리에 들어가 있는지 알려주는 테이블인데, Project Settings창의 Link탭에 보면 아래쪽 그림처럼 "Generate mapfile"이란 체크박스를 볼 수 있다. 해당 프로필(Debug/Release) 폴더 내에 가 보면 .map 파일을 볼 수 있다.



    열어 보면 아래와 같은 형식으로 되어 있다.

    더보기

    20. 어셈블리 코드 생성하기

    풀 어셈블리 코드 리스트를 생성하는 방법. Project Settings의 C/C++탭에 가면, Category가 General로 되어 있다. 이 드롭다운 리스트를 "Listing Files"로 바꾸면 아래 내용이 바뀌면서 "Listing File Type" 이라는 드롭다운 박스가 하나 더 나타나는데, 이 항목을 "Assembly with Source code" 정도로 바꾼 후 컴파일 하면 해당 프로필 (Debug/Release) 디렉토리 아래쪽에 생성이 된단다.

     

    21. 실행파일 크기 줄이기!

    Step-By-Step.

    1. Project Settings를 열어 C/C++탭으로 간다.
    2. 카테고리를 Code Generation으로 바꾼다.
    3. Debug프로필이면 Debug Multithreaded DLL로 바꾸고, Release프로필이면 Multithreaded DLL로 바꾼다.
    4. 소스코드 첫 줄에 아래 내용을 삽입하고 빌드.

    #pragma comment(linker, "/OPT:NOWIN98")


     

    22. Breakpoints 다이얼로그

    가끔씩 포풍 디버깅을 하다 보면 자신도 모르게 코드 윈도우에 빨콩들이 수없이 박혀있는 장면을 목격하게 된다. 

    근데 또 그게 줄마다 F9를 누르다 보면 빡치긴 하는데 누구한테 화를 낼 수도 없고 [...]

    그럴 때 ALT+F9를 누르자. 오른쪽 창이 나타나면서 한꺼번에 해제시킬 수 있다.

    이 창은 Edit 메뉴의 Breakpoints라는 항목을 클릭하면 나타난다.

    Data 탭을 누르면, 무려 "변수가 변경되었을 때 Break" 가 가능해진다!!!!!


    23. 리소스 편집하기 

    VS는 리소스 에디터이기도 하다. 256색 이상 비트맵 빼고는 다 편집 가능ㅋ
    File-Open으로 실행파일이나 DLL을 열어 보자. 단, Open As 콤보박스를 "Resources"로 변경하고 열어야 된다.

     

    24. 워크스페이스 윈도우(트리메뉴) 보이기

    Press Alt+0 (Alt+zero) at any time to bring up the Project Workspace window.
     

    25. 릴리즈 빌드를 디버그 하기

    릴리즈 빌드도 디버그를 할 수 있다고 한다. (바람직하다!) 디버그 빌드에서는 문제가 없었는데, 릴리즈 빌드만 하면 튀어나오는 에러들이 있다. 물론 이 문서 초반에 "니 코드부터 고쳐라"고 했지만, 그런 문제를 제외한 것도 있기 마련.. 

    Project Settings에서 Link탭으로 이동한 후, 카테고리 드롭다운 박스에서 "Debug"를 선택하자. 그리고선 나타나는 "Debug Info"를 체크한 후, COFF Format을 선택하자. 

    탭을 C/C++로 옮겨, General 카테고리를 선택하면 나타나는 Debug Info를 "Program Database for Edit and Continue" 로 선택하면, 디버그 빌드처럼 디버깅을 수행할 수 있다.

    이렇게 하면 또 하나 좋은 것이, .pdb라는 파일이 실행파일에서 따로 떨어져 나오는데, 각종 민감한 정보가 실행파일에서 제외되므로 안심하고 exe를 배포할 수 있다.

    26. 경고 레벨

    Catch more errors in your project by enabling "Warning Level 4" in the C/C++ General settings tab.


    27. Console and Window applications

    API공부하려고 프로젝트 만들었는데 실수로 콘솔 어플리케이션 프로젝트를 생성했는가? Project Settings의 Link 탭의 Project Options 에디트 상자에 아래와 같이 입력하면 서로 토글 가능하다.
    /SUBSYSTEM:CONSOLE
    /SUBSYSTEM:WINDOWS

     

    28. 코드 인덱싱

    Project Settings의 C/C++탭에 Generate Browse Info 체크박스를 체크해 두자. 이제 빌드 한번 하면 소스코드를 이클립스처럼 탐색가능하다. 초반에 몇개 설명된 팁들이 이 항목과 연관이 있다.

     

    29. 왓치 창 고급기법

    이런게 있는줄은 몰랐다. 다음과 같은 사용법이 있단다.

    Command

    Description

    eax

    함수 리턴값을 보여준다. 물론 끝났을 때

    @err

    현재 저장된 Win32 GetLastError 값을 보여 준다.

    string,su

    지정된 string을  Unicode 로 보여준다

    value,hr

    지정된 value를 HRESULT로 취급한다. 아래 그림처럼 담고있는 Text를 볼 수 있다.

    value,wm

    지정된 value를 Windows Message 로 인식한다.

    value,x

    지정된 value를 16진수로 표현해준다.

    array,23

    지정된 배열의 아이템 중 23개만 보여준다.

    address,mb

    변수나 주소값에 대한 메모리 블럭을 hex-dump로 보여줌.




    30. CRT(C-Runtime) 함수로의 진입을 막기

    MFC 개발하는데 C 런타임이 호출될 때가 있나 보다. 다음과 같이 해결하면 된단다.

    1. AUTOEXP.DAT 파일을 연다.
    2. [ExecutionControl] 을 추가하고
    3. 해당 섹션에 다음 내용 추가 -> functionName=NoStepIntoclassName::*=NoStepInto
    4. VS 껐다 켬

     
    이 부분은 지식이 없어서 검색해 봤는데, MS 에서도 해결방법을 제공.
    http://support.microsoft.com/kb/148652/ko



    처: http://codepasta.net/82


Designed by Tistory.