IT 취미생활.  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
'Debug'에 해당하는 글(5)
2009.03.22   문제해결을 위한 행동 "디버깅" 5
2008.08.12   [Wince5.0] Debug Mode에서만 출력하는 디버깅 메시지
2008.08.04   [Error Case - Wince5.0] C4430
2008.03.28   [Debug] 디버깅시 Symbol Load하는 방법
2008.03.12   vs2005에서 Data breakpoint 사용하는 방법


문제해결을 위한 행동 "디버깅"
오랜만에 지하철에서 꺼내 들은 "실용주의 프로그래머".....
하드커버를 열고 주저 없이 처음으로 펼친 곳은
"디버깅"이다.

요즘 써드파티와 같이 일을하며, 문제해결을 위한
디버깅과 소통에 있어서 난감한적이 있다.

예전 , 팀장님은 디버깅을 하는데 있어서,
"내가 만든 곳에는 문제가 없다"라는 생각을
버리고 "내가 만든 곳에 문제가 있다"라고 했다.


실용주의에서는 "디버깅은 개발자에게 예민하고 감성적인 주제다" 라고
이야기를 한다.  
다른 개발자 혹은 테스터에게 어떤 문제에 대해서 리포팅을
받았을때 본인 스스로는 어떤 것을 느끼고? 어떤 행동을 하는가?

문제를 부정, 지목, 어설픈 변명 혹은 냉담(절대 내 문제일리 없어)등으로
대하지 않는가? 아니면, 그 상황을 인정하고, 최근 변경된 코드를 찬찬히 훓터보며
버그 재현을 통해 문제를 해결하려 하는가?

개발자라면 누구나 후자의 방법으로 문제 해결을 해나가야 할 것이다.
하지만 본인도 은근슬쩍 전자처럼 행동을 하는 경우가 많다.
우리가 가장 먼저 머리속에 각인 시켜야 할 것은 "문제는 발생했다" 라는 것이다.

자 실용주의 프로그래머는 남을 비난하기 보다는 문제를 고치는데,
집중하고 비록 내 문제가 아니었더라 하더라도, 상대방이 문제를 해결 해주면
칭찬의 한마디를 잊지 말자, 그렇지 않으면 당신의 퇴근시간이 더욱  늦어 질 것이다.


로니강은 이렇게 디버깅을 시작합니다..

1. 문제가 있다는 사실을 받아 들입니다.
문제에 대해서, 상세하게 기술을 합니다.
문제의 요점을 파악하기 위한것이죠.
추후에 동일한 문제가 발생했을 경우에 대비한 DB이기도 하고요.

2. 데이터(log)을 이용해라
"로그는 정직하다."
정상적인 경우와 비정상 적인 로그들을 모아서 저장 해 놔보세요.
txt 파일 몇백개를 유지 한다고 해서, 당신의 저장공간이 부족하거나 그렇지 않습니다.

버그가 발생했을 경우, 로그를 찬찬히 읽어보면,
어디서 무엇이 잘못 되었는지 확인 할 수 있습니다.
자 이제 코드를 살펴 보아요, 좀더 문제의 범위를 찾기 위해서,
몇라인의 로그를 더 심어야 할지도 모릅니다.

3. 분할 정복
알고리즘 책에서 이 말을 빼 놓지 않고 있죠?
문제를 해결하기 위해서도 꼭 필요한 개념입니다.

4. 소스 형상관리를 이용하는 것은 기본이겠죠?
SVN을 이용하여 원하는 시점으로 돌아가 보시고, 코드의 변경사항 들을
살펴 볼 수 있으니, 정말 좋은 환경입니다.
여러분의 실수는 Undo 할 수 있습니다.

자자! 실용주의 프로그래머는 자기 자신을 속이지 않습니다.

최근 같이 일하는 M사에 B군에게 실용주의 프로그래머라는
책을 선물 해주고 싶군요.


너무 성의 없는글이네요 :( 스르르르륵...


[Wince5.0] Debug Mode에서만 출력하는 디버깅 메시지

Wince5.0이나 WindowsMobile 같은 경우 MFC를 사용하지 않을경우
TRACE를 사용 할 수 없습니다.
따라서 아래처럼 구성해서 사용하시면 DebugMode에서만 동작하는
메시지를 만들 수 있습니다.



#ifdef _DEBUG
#define TRACE                Trace
#else
#define TRACE                ((void)0)
#endif

#ifdef _DEBUG
#define MAX_MSG_SIZE          1024        
void TRACE(const TCHAR *szString, ...)
{
 static TCHAR szBuffer[MAX_MSG_SIZE] = { 0 };
 va_list argptr = NULL;
 va_start( argptr, szString );
 vswprintf( szBuffer, szString, argptr );
 OutputDebugString( szBuffer );
 va_end( argptr );
}
#endif



ex)  TRACE( L"Service Name : %s\n", buffer);
       TRACE( L"WE_SERVICE_DISCOVERY_COMPLETE\n\r " );


고운하루 되세요.


[Error Case - Wince5.0] C4430

오늘도 Builder로 써 열심히 Build를 하고 있었다...
나 <--- 난 거의 팀내 잡부로 수 많은 Link Error를 접해보는 사람이다.

아래와 같은 C4430을 마주했다.

1>.\SubtitlePresentation.cpp(109) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Class에서 Member Function을 선언하고, 실제 구현부에서 return 값을 빼먹었을때,
C4430이 여지 없이 일어난다 한번 테스트를 해보길...





MSDN Error 페이지를 살펴 보니 아래와 같은 경우 발생하게 된다.

Error Message

missing type specifier - int assumed. Note: C++ does not support default-int

This error can be generated as a result of compiler conformance work that was done for Visual C++ 2005: all declarations must now explicitly specify the type; int is no longer assumed. See Breaking Changes in the Visual C++ 2005 Compiler for more information.

C4430 is always issued as an error. You can turn off this warning with the #pragma warning or /wd; see warning or /w, /Wn, /WX, /Wall, /wln, /wdn, /wen, /won (Warning Level) for more information.

Example

The following sample generates C4430.

  Copy Code
// C4430.cpp
// compile with: /c
struct CMyClass {
   CUndeclared m_myClass;  // C4430
   int m_myClass;  // OK
};

typedef struct {
   POINT();   // C4430
   // try the following line instead
   // int POINT();
   unsigned x;
   unsigned y;
} POINT;



[Debug] 디버깅시 Symbol Load하는 방법
VS tools을 사용하여 Debug시 작성한 Dll들 및 기타  system dll에 대한 Symbols를 로드 하는
방법은  아래와 같다.

디버깅중에서

Debug --> Windows --> Modules 템에서 해당 Dll에서 마우스 오른쪽 버튼을 누르고
심볼을 로드 하면 Symbol status가 loaded 상태가 된다.


vs2005에서 Data breakpoint 사용하는 방법

vs2005에서 Data breakpoint 사용하는 방법


이럴때 : 특정 변수 또는 메모리가 변한 상태 --> 어떤 쉐리가 메모리를 밀었을때..!!! 좋음



일단 Data Breakpoint 는 Break 상태에서만 설정할 수 있구요.

1. 일단 변수를 감시하고자 하면 변수의 선언부 정도에다 Breakpoint 를 설정해둡니다.

    혹시 메모리 위치 자체를 감시하실 거라면 아무데나 적절히 거세요 = :)

2. Break 가 걸리면, 메뉴에서(단축키가 없는듯 ?) Debug > New Breakpoint > New Data Breakpoint 를 선택합니다.


3. Address 부분에다가 메모리 주소를 직접 적으시거나 &value 와 같이 변수의 주소를 설정해주시면 알아서 실제 메모리 주소로 치환되어 들어갑니다.

4. Byte Count 는 적절히 감시해야 하는 메모리의 크기를 설정해주시면 되구요.

5. Continue 해서 중단된 녀석을 실행해주면, 실행하다 메모리가 변경되면 냉큼 잡힙니다.

win32 platform에서는 확인 됨




 

확인 해볼 것

1. Smart Device 를 지원하는 확인 해볼 것



BLOG main image
취미생활
 Notice
 Category
분류 전체보기 (191)
매일매일갱생 (83)
서버개발 (1)
임베디드개발 (12)
Programming (80)
Personal Projects (6)
유용한 프로그램 (0)
 TAGS
퇴사 Algorithm DVB It DirectShow 출장 english email Windows Mobile6.0 isdbt 벨소리 변경 debugging 음식 서태지 알고리즘 개발자 티스토리 초대장 영어 이메일 M480 warning 군대 DVB-T project English ISDB-T Brazil VC++ Linux 미라지폰 C++ Wince5.0 Debug 1seg Error Case Java C spam mail Dshow 티스토리초대 MP3
 Calendar
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
 Recent Entries
 Recent Comments
 Recent Trackbacks
 Archive
 Link Site
zextor
괴짜 프로그래머의 일상사~@@
Gag & Peace, and more..
Kazakhstan Almaty.......
Min-A
Sadgarret
Steve Yoon's log
가슴 뛰는 삶을 살아라
오스틴 파워
GUI sin
melanie parker_Lady
제레미의 TV 2.0 이야기..
 Visitor Statistics
Total :
Today :
Yesterday :
rss