Search

'Tips'에 해당되는 글 2건

  1. 2016.08.09 비쥬얼 스튜디오 디버깅 팁 ( Visual Studio Debugging Tips )
  2. 2013.04.30 Eclipse Tips
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

출처 : http://www.gamedevforever.com/282



스코프를 벗어난 객체 주시하기

디버깅을 하다 보면 스코프를 벗어난 객체를 계속 주시하고 싶을 때가 있습니다. 하지만 비쥬얼 스튜디오의 조사식 창(Watch Window)에서는 입력한 객체가 스코프를 벗어나면 비활성화가 되어 더이상 값을 확인 할수 없게 되어버리죠. 이 때, 조사식에 주시 하고픈 객체의 포인터를 입력하면, 해당 객체가 스코프를 벗어났더라도 (해당 객체가 살아 있다면) 지속적으로 값을 확인할 수 있습니다.



위 코드를 보면 mHyuna 객체는 이미 스코프를 벗어나 조사식 창에서 비활성화가 되었지만, (CHyuna*)0x0031fe2c 식으로 직접 객체의 주소를 참조하여 스코프를 벗어난 객체의 값을 확인할 수 있습니다.


배열값 확인

간혹 매우 큰 크기의 배열을 사용할때가 있습니다. 대략 1만개라고 해보죠. 이 배열 내부의 값을 확인하려면 어떨까요? 1만개의 배열을 일일히 확인하려면 엄청나게 스크롤링을 해야 할 것 입니다.



이럴때 범위식을 사용하여 특정 구간의 값만을 확인하는 방법이 있습니다. 배열명, 범위 식으로 조사식 창에 입력하여주면 그 범위 만큼의 배열만 보여주는 것이죠. 또한 포인터 연산을 통해서 특정 범위 부터의 값도 확인할 수 있습니다.



CRT 라이브러리를 활용한 메모리 누수 탐지

메모리 누수는 항상 골치 거리입니다. 수많은 코드들 중에서 어디서 메모리가 새는지 원인을 찾기도 힘들죠. CRT 라이브러리를 활용하여 메모리 누수 지점을 찾기 위한 방법이 있습니다. 먼저 아래와 같이 CRT 라이브러리를 사용하기 위한 헤더를 선언 해줍니다. 그리고 메모리 누수 체크를 위한 플래그를 선언 해줍니다( _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); ).



위 코드를 보시면 일부러 char[8] 만큼의 메모리를 할당 해주고, 해제를 안하고 있습니다. 이 코드를 실행시키면 아래와 같이 출력 창에서 메모리 누수가 탐지 되었다는 메시지가 나타납니다.



출력창 메시지에서 빨간 네모 박스의 숫자를 잘 기억해두세요. 이 것이 메모리가 누수되는 위치를 가리키고 있는 값입니다. 이제 이 값을 이용해 메모리 누수 위치를 찾아보도록 하겠습니다.


우선 프로그램 아무 곳에나 중단점을 걸고 디버깅 모드로 들어갑니다. 되도록 이면 프로그램의 시작 점에 거는 것이 좋습니다. 디버깅 모드에 들어갔으면 아래와 같이 조사식 창에 {,,msvcrXXXd.dll}_crtBreakAlloc 을 입력해줍니다. 여기서 XXX는 비쥬얼 스튜디오 버전을 적어줍니다. 2008일 경우 msvcr90d.dll, 2010일 경우 msvcr100d.dll, 2012 일 경우 msvcr110d.dll 입니다.



조사식 창에 위의 구문을 입력하면 처음에는 값이 -1로 나올 것입니다. 여기에 출력창에 나왔던 메모리 누수 위치값을 입력해줍니다. 위의 예제에서는 108 이죠. 그 다음 F5를 눌러 프로그램 실행을 재개합니다. 


그러면 어디선가 중단점이 걸립니다. 이제 콜스택을 확인해봅니다.



중단점이 걸린 곳은 msvcr110d.dll 모듈입니다. 이 부분은 디버깅을 위한 곳이니 신경 쓰지 마시고, 밑으로 따라 내려가 보시면 실제 작업 영역 호출 부분이 있습니다. 이 곳으로 따라 가보면...



짜잔~ 메모리를 할당하고 해제 하지 않은 부분을 찾아냈습니다. 이렇게 CRT 라이브러리를 이용하여 메모리 누수 원인을 찾아 낼수 있습니다.


값이 변경 되는 위치 찾기

디버깅을 하다보면 특정 변수가 어디서 값이 변경 되는 지를 알고 싶을 때가 있습니다. 변수를 사용하는 곳을 전부 검색하여 중단점을 걸어서 볼수도 있지만 데이터 중단점 기능을 이용하면 값을 변경 하는 곳을 손쉽게 찾을 수 있습니다.


먼저 추적 하고 싶은 데이터의 주소를 파악합니다.



그 다음 비쥬얼 스튜디오의 디버그 -> 새 중단점 -> 새 데이터 중단점을 선택합니다. 여기에 위의 데이터 주소 값을 입력 해줍니다. 타입의 크기 값에 주의 합니다.



중단점을 추가 한 후, F5를 눌러 실행을 재개합니다. 그러면 어디선가 해당 데이터가 값이 변경 되면 아래와 같이 중단점이 작동하게 됩니다.



위의 예제에서는 SexyUp 함수에서 해당 데이터를 변경하는 것을 알아냈습니다.


출처 및 참고

Code Project Article - 10 Even More Visual Studio Debugging Tips for Native Development

Code Project Article - 10 More Visual Studio Debugging Tips for Native Development

MSDN - CRT 라이브러리를 사용하여 메모리 누수 찾기

'Programming > C,CPP,CS' 카테고리의 다른 글

CRuntieClass Reflection  (0) 2016.08.17
error C4996: 'xxx': deprecated로 선언되었습니다.  (0) 2016.08.12
C++ Standard library has many containers  (0) 2016.07.19
Log4cxx Build in VS2013  (0) 2016.06.29
Log4cxx Tutorial  (0) 2016.06.28

Eclipse Tips

Programming/JAVA,JSP 2013. 4. 30. 02:50 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Eclipse 팁 #1 (코드 Style 설정)

 

팀 프로젝트를 진행할때 개발자별로 Coding Style이 달라서 고생하는 경우가 많습니다. 
이를 위해 Eclipse는 코드 형식화를 지원하는데요,

아래와 같이 코딩 규칙을 위해바는 코드가 있다고 가정합시다.

 

해당 코드 위에서 [ Ctrl+Shift+F ] 키만 누르면 아래와 같이 코드가 이쁘게 정리됩니다.

 

이는 Eclipse에서 설정된 Code Formatter의 설정에 따른 것입니다. 
프로젝트에서 개발된 모든 코드에 같은 코딩 규칙을 적용하고 싶다면.. 
결정된 Coding Convention에 따라 Code Formatter의 설정을 바꾼 다음, 
그것을 XML 파일로 Export하고, 개발자에게 Import 시켜 적용하도록 하면 된답니다. 

아래 그림은 Windows - Preferences 에서 "Java - Code Style - Code Formatter"를 
선택했을 때 나오는 그림입니다. 
Eclipse 3.0은 기본적으로 2가지 코드 형식을 기본적으로 내장하고 있습니다.

 

Java Conventions를 선택하고, Show.. 버튼을 누르면 해당 설정을 커스터마이징 할 수 있습니다. 
탭 사이즈와 괄호의 위치 등 모든 것을 변경할 수 있습니다. 

Eclipse 팁 #2 (Import문 정리)

 

개발할 때 어떤 기능을 구현하기 위해 특정 라이브러리를 import 시켜놓고, 
그 기능이 필요없어져서 삭제한 다음에도 import문은 그대로 두는 경우가 많습니다. 

그때 Eclipse가 제공하는 Organize import 기능은 아주 유용한데요.. 
아래와 같이 사용되지 않는 라이브러리를 import한 경우 Eclipse는 앞에 전구를 키고 표시해줍니다. 
이때 [ Ctrl+Shift+O ] 버튼을 누르면 사용하지 않는 모든 import 문이 정리됩니다. 아래와 같이 깨끗하게 말이죠.

 

또 한가지 유용한 기능은 같은 패키지 내에서 여러 개의 클래스를 import할 경우입니다. 
예를 들어 한 패키지 내에서 4개 이상의 클래스를 import 한다면, 
그것을 *로 합쳐서 표시하도록 하고 싶을 때가 있습니다. 
그럴 때는 window - preference 로 가서 java - code style - organize import에서 
Number of imports needs for .*의 수를 4로 해놓으면, 
같은 패키지에서 4개이상의 클래스가 임포트되면 *로 합쳐서 표시해줍니다. 
(Apply 버튼 바로 위에 그 항목이 있습니다.)

 

Eclipse 팁 #3 (영역별 주석처리)

 

여러 줄에 걸쳐 있는 코드를 주석 처리하고 싶은데, 
주석 처리하고자 하는 영역 내에 /* */가 있을 경우 참 곤란하시죠? 

일일이 // 를 앞에 붙이려니 얼마나 손가락이 빠른지를 테스트하는거 같구.. ^^* 
그럴 때 주석처리할 영역을 선택 한 다음 [ Ctrl+/ ] 를 눌러보세요. 
아래와 같이 자동으로 해당 영역을 주석으로 만들어줍니다. 
주석을 해제하고 싶다면 다시 한번 더 [ Ctrl+/ ]를 눌러주면 됩니다.

 

Eclipse 팁 #4 (에디터칸이동)

 

실제 프로젝트를 작업하다 보면 한번에 열어놓은 파일이 30개가 넘는 것은 기본이죠? 
그때 해당 파일들 사이를 열려진 윈도우를 [ Alt+Tab ] 을 이용해서

이동하는 것 같은 기능이 있다면 편할겁니다. 
그러한 단축키가 [ Ctrl+F6 ] 입니다. 
그 키를 누르면 화면 중앙에 아래와 같은 에디터 이동 화면이 뜹니다

 

바로 이전으로 이동할 때는 [ Ctrl+F6 ]이 편하지만, 
여러 개 중 하나를 이동할 때는 [ Ctrl+F6 ]을 누른 후,

[Ctrl+화살표] 를 이용해서 원하는 에디터로 이동하는 것이 편합니다. 

Eclipse 팁 #6 (줄번호 표시 및 줄 이동하기)

 

Eclipse의 기본 설정에 라인 번호는 표시되지 않도록 되어 있습니다. 
디버깅할 때 특정 라인에 에러가 있음을 확인했는데, 일일이 줄을 세어가면서 이동할 수도 없구.. 
그때 해당 라인으로 이동하기 위한 단축키가 [ Ctrl+L ] 입니다. 
윈도우와 같이 Ctrl+G 로 단축키를 변경해서 쓰시는 것도 좋을 듯 합니다. 

아예 줄번호가 항상 표시되도록 하고 싶다면 window - preference 에서, 
Java - Editor로 이동한 다음 "Show line numbers"를 체크해두시면 됩니다. 

Eclipse 팁 #7 (변경사항 추적하기)

 

변경 사항을 추적하고자 하는 파일을 PackageExplorer에서 선택 후, 
오른쪽 버튼을 눌러 컨텍스트 메뉴에서 [ compare with Local History ] 선택합니다.

 

시간대 별로 이전의 작업 결과를 보실 수 있습니다. 
만일 이전의 코드로 되돌아가고 싶다면, 같은 방법으로 파일의 컨텍스트 메뉴에서 
[ Replace with ] 를 선택하고, [ Local History ]에서 변경하면 됩니다.

 

Eclipse 팁 #8 (Javadoc 문서생성 )

 

JavaDoc 형태의 주석으로 소스코드 문서화가 된 상태라고 가정하겠습니다. 
Project 메뉴의 [ Generate Javadoc... ] 기능을 실행하면 
간편한 마법사의 지원을 통해 Javadoc 문서를 생성할 수 있습니다. 

일반적으로 프로젝트 루트 밑에 doc 이란 폴더 안에 JavaDoc으로 생성된 API 문서를 포함합니다.

 

생성될 API 문서에 포함시킬 정보를 선택하는 것이 마법사의 다음 단계입니다. 
Finish 버튼을 누르면 Package Explorer에 아래와 같이 API 문서가 생성된 것을 확인할 수 있습니다. 

Eclipse 팁 #9 (전체프로젝트 ZIP 백업)

 

전체 프로젝트를 백업하기 위해 압축을 해야 할때 유용한 기능입니다. 
File 메뉴의 Export 기능을 실행하면 아래와 같은 윈도우가 뜹니다.

 

선택요소 중에서 ZIP 파일을 선택합니다. 
다음 화면은 백업할 요소들을 선택하는 것입니다. 
일반적으로 자동 생성되는 JavaDoc 문서나 Classes 파일들은 백업하지 않습니다. 
적당한 백업 파일 이름과 위치를 결정하고 Finish 버튼을 누르면 백업이 완료됩니다.

 

이클립스에서 유용한 단축키

 

Ctrl + e : 한줄지움
Ctrl + w : 메뉴보여줌
Ctrl + space : 클래스등 코드 도움
Ctrl + / : 한줄 주석 반대는 Ctrl + \
Ctrl + , : 찾기나, TASK항목 이동

Ctrl + . : 이동

Ctrl + F6 : Editor 선택

Ctrl + F7 : View 선택

Ctrl + F8 : Perspectieve 선택

Ctrl + F11 : 디버깅

Ctrl + 1 : QuickFix 실행

 

Ctrl + Shift + b : 브레이크 포인트

Ctrl + Shift + e : 현재 캐럿에서 끝까지 삭제

Ctrl + Shift + f : 코드 포맷팅

Ctrl + Shift + m : 자동 임포트
Ctrl + Shift + o : 임포트 자동 정리

Ctrl + Shift + space : 입력 파라미터 정보 보여줌


출처 : http://blog.naver.com/simz/



'Programming > JAVA,JSP' 카테고리의 다른 글

JAVA Swing 두개의 판넬을 겹치기  (0) 2013.08.03
JAVA JNI  (0) 2013.05.01
JAVA MYSQL ANDROID REST 활용  (0) 2013.04.28
JAVA MYSQL 활용 4 Android App  (0) 2013.04.28
JAVA MYSQL 활용 3  (0) 2013.04.28