IT 취미생활.  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
'debugging'에 해당하는 글(3)
2009.03.22   문제해결을 위한 행동 "디버깅" 5
2008.08.12   [Wince5.0] Debug Mode에서만 출력하는 디버깅 메시지
2008.06.27   "msvcrtd.lib" 링크시 문제


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

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

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


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

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

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

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


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

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 " );


고운하루 되세요.


"msvcrtd.lib" 링크시 문제
LNK4098: defaultlib "msvcrtd.lib" conflicts ... 학습중(Windows)

C Run-Time Library는 standard library를 말합니다.

printf, strcpy, malloc, new, cin, cout 등등이  이 라이브러리에 포함됩니다.


종류는 꽤 많은데, 별로 복잡하지는 않습니다.

libc.lib : c언어에 해당하는 라이브러리 입니다. printf, strcpy, malloc 등이 구현되어 있습니다.

libcmt.lib : libc 와 동일합니다만, 이것은 멀티쓰레드 용입니다.

msvcrt.lib : libc 와 동일합니다만, 이것은 dll 용입니다.

               ( 위의 두가지는 static link 로 사용되고, 이것은 dynamic link 로 사용됩니다.)



libcp.lib : c++언어에 해당하는 라이브러리 입니다. cin,  cout, new  등이 구현되어 있습니다.

libcpmt.lib : libcp 와 동일합니다만, 이것은 멀티쓰레드 용입니다.

msvcprt.lib : libcp 와 동일합니다만, 이것은 dll 용입니다.

               ( 위의 두가지는 static link 로 사용되고, 이것은 dynamic link 로 사용됩니다.)



그러므로, 위의 라이브러리는 두개의 그룹중에 하나씩만 포함이 되어야 합니다.

만약, libc 와 msvcrt 가 둘다 링크되면 중복선언 되었다는 에러가 납니다.


하지만, 다른 프로젝트에서 가지고 왔다면, 이러한 링크옵션 수정하는 것이 쉽지 않을 수 있습니다.

프로젝트 구조를 보아야 알 수 있으나, 한가지 해결방법은....


링크에서 메세지에도 나와 있듯이, 링크 옵션에 다음을 추가 하십시오.

/NODEFAULTLIB:library

 

library 에 포함시키지 말아야 할 라이브러리를 추가하시면, 이 라이브러리는 링크에 포함되지 않습니다.

 

그러면, 중복 선언 에러는 해결 할 수 있습니다.



 출처 : Devpia / VC++ / 질문답변 / 572567

작성자 : 김무석(kim790815) 님



BLOG main image
취미생활
 Notice
 Category
분류 전체보기 (191)
매일매일갱생 (83)
서버개발 (1)
임베디드개발 (12)
Programming (80)
Personal Projects (6)
유용한 프로그램 (0)
 TAGS
Error Case project DirectShow VC++ English MP3 C++ 출장 Dshow 영어 이메일 C 알고리즘 Java 서태지 DVB-T debugging 미라지폰 퇴사 티스토리 초대장 Debug ISDB-T 음식 M480 개발자 벨소리 변경 티스토리초대 Linux warning Wince5.0 Algorithm isdbt 군대 spam mail Brazil 1seg DVB Windows Mobile6.0 english email It
 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