IT 취미생활.  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
'Programming'에 해당하는 글(80)
2009.07.01   [warning]suggest parentheses around assignment used as truth value
2009.07.01   Hello World가 실행 파일이 될때까지...
2009.06.18   소스안에 적당한 라인 수
2009.04.06   reg42 to reg565 2
2009.04.01   윈도우 임베디드 CE 프로젝트의 12가지 금기
2009.03.22   문제해결을 위한 행동 "디버깅" 5
2009.02.26   linux 에서 메모리 상태보기
2009.01.09   [보습학습] UTF-8
2009.01.06   신입 OT에서 감명 받은 것!!! "altigenome"
2008.12.12   [Win32]동적 할당 후 delete하지 않은 메모리 할당 위치 알아내기 2
2008.12.12   파일명, 라인정보를 보여주는 에러 메세지 박스 만들기 1


[warning]suggest parentheses around assignment used as truth value

워닝 발생

if ( x = getSomethingValue())
{
 ........
}

해결방법
if ( (x = getSomethingValue()) )
{
 ........
}

KIN.....



Hello World가 실행 파일이 될때까지...
우선 간단하게 컴파일이 되는 아래 Hello World를 작성한다.

helloworld.c



컴파일러들을 이용하여 실행할 수 있는
실행 파일로 만드는 과정을 간단하게 적어 보면

Preprocessor --> Compiler -->Assembler  --> Linker & Relocation--> executableFile

1. 컴파일러는 helloworld.c 파일을 읽어들인다.
    (확장자에 따라 c / c++로 인식)

2. helloworld.c에 Code를 오브젝트 파일로 만든다.

3. 중간 목적 파일(기계어)로 변경한다 .

4. 중간 목적 파일을 링커 프로그램으로 연결한다.

5. exe  실행파일


소스안에 적당한 라인 수
기능별로 파일을 분리하는 것이 가장 적당할 것 같은데...

"보통 1000라인 이하가 적당하다" 라고 합니다.
(코드 컴플릿에서도 관련 내용을 다루고 있는데
기억이 가물한지라.. 확인 후 내용 추가...)


클래스를 한 헤더에 여러개 쓰면 소스가 커지는 원인이므로
완전 밀접한 작은넘(클래스) 아니면.. 클래스당 하나의 모듈로 나눈다.

낙서질
 
스르르르륵


reg42 to reg565
unsigned short rgb24_2_565( int r, int g, int b )
{
   
return (unsigned short )(((unsigned(r) << 8) & 0xF800) | 
            ((unsigned(g)
<< 3) & 0x7E0)  |
            ((unsigned(b)
>> 3)));
}


윈도우 임베디드 CE 프로젝트의 12가지 금기
Wince 5.0, windows mobile5.0, 6.0에서 어플리케이션
directshow를 통한 filter, isdbt, dvbt, meida application을 만들어 본
입장에서 무척이나 공감가는 내용이다.

그거 윈도우에서 개발하는거와 뭐가 달라라고 이야기 할수 있지만
다른점도 존재 한다는걸 알아야, 좀더 개발이 용이 하지 않나 싶다.


작년 기사지만 wince에서 뭔가를 개발하고 있다면,
또는 프로젝트를 진행하는 팀장이라면 읽고 생각해보면 좋겠다.

윈도우 임베디드 CE 프로젝트의 12가지 금기
( http://zdnet.co.kr/ArticleView.asp?artice_id=00000039176270 )


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

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

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


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

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

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

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


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

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

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

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

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

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

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

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


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


linux 에서 메모리 상태보기

free -k -s5

지속적으로 5초 단위로 메모리 상태를 모니터링 할 수 있다.


[보습학습] UTF-8

UTF-8유니코드를 위한 가변 길이 문자 인코딩 방식 중 하나로, 켄 톰프슨롭 파이크가 만들었다. 본래는 FSS-UTF(File System Safe UCS/Unicode Transformation Format)라는 이름으로 제안되었다.

UTF-8 인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지를 사용한다. 예를 들어서, U+0000부터 U+007F 범위에 있는 ASCII 문자들은 UTF-8에서 1바이트만으로 표시된다. 4바이트로 표현되는 문자는 모두 기본 다국어 평면(BMP) 바깥의 유니코드 문자이며, 거의 사용되지 않는다. UTF-16과 UTF-8 중 어느 인코딩이 더 적은 바이트를 사용하는 지는 문자열에서 사용된 코드 포인트에 따라 달라지며, 실제로 DEFLATE와 같은 일반적인 압축 알고리즘을 사용할 경우 이 차이는 무시할 수 있을 정도이다. 이러한 압축 알고리즘을 사용하기 힘들고 크기가 중요할 경우 유니코드 표준 압축 방식을 대신 사용할 수 있다.

좀더 자세한 내용은 아래  wiki백과 사전에서.......

출처 :
http://ko.wikipedia.org/wiki/UTF-8



신입 OT에서 감명 받은 것!!! "altigenome"

사용자 삽입 이미지




오늘 신입 OT를 오전동안 가졌습니다.
회사에 대해서 여러가지를 소개 해주는 동안 그중에서 가장
눈길을 끄는 PT한장이 있었는데,  내용은 회사의 구성 요소를 영단어로 표현한 것이었습니다.

3. altigenome
경영이념 중 회사에 구성요소를 아래와 같이 3가지로
제품(Product),
사람(People),
프로세스(Process)를 중심 축으로 하여 우수한 유전자를 발굴하여 키우고 발전시켜 구성원 모두가 부유하고, 건강함, 재미 있고, 행복해하는 회사를 만들자는 의미임.
참으로 이상적인 문구였습니다. 그런 회사가 있을까요?

위에 박스 처럼 부유하고 건강하고 재미 있고, 행복한 회사를 만들어가기 위해서
분명 많은 사람들이 노력을 하고 있습니다. 저희 회사뿐만이 아니구요.

예전 ONOFF Mix 개발자 모임에서의 주제와 너무나도 흡사하습니다.
그 컨퍼런스의 가장 주된 테마는 Project, Process, Product, People였습니다.

OST라는 개념으로  각 테이블별 주제를 정하고, 사람들은 자신이 좋아하는 주제에 따라 마음데로 이동하여, 자신의 경험이나 지식을 공유하는 그런 열린 토론을 하고, 여러가지를 발표하던 개발자 모임이었습니다. 이러한 토론을 통해서 좀더 업무를 개선하고 삶의 질을 높이고자 하는 노력입니다.

요즘 처럼 IT인력이 부품화 되어가 가는 것은 비단 회사만의 문제는 아닐 것이라 생각합니다.
이런 환경을 바꾸지 않고 그저 묻어가려는 IT업을 하고있는 게으른 개발자가 더 큰 문제라고 생각합니다.

항상 학습을 통해 발전하려는 자세가 IT에서는 가장 중요한 것 같습니다. -0-


[Win32]동적 할당 후 delete하지 않은 메모리 할당 위치 알아내기
정확하게 출처가 어디인지는 모르겠지만 ;;;
도움이 되었으면 합니다.

동적으로 생성하고 delete을 안한경우 비주얼C++에서 알아내는 방법입니다..
VC++에서만 됩니다.
일단 밑의 코드를 컴파일 해보시고, F5(디버그 실행) 키를 누르면 컴파일러 출력창에
몇바이트의 메모리가 해제를 안했는지 알려줍니다.

#ifdef _DEBUG
   #define new new(_CLIENT_BLOCK, __FILE__, __LINE__)
#endif
디버그 모드에서만 작동됩니다..

void StartDebug()
{
  _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);
}
그리고 이거는 맨처음 해주어야 합니다.. 자세히는 모르겠고, 걍 저렇게 ^^;;


코드:
#include <stdio.h>
#include <string.h>
#include <crtdbg.h>
// 디버그용 new
#ifdef _DEBUG   
 #define new new(_CLIENT_BLOCK, __FILE__, __LINE__)
#endif
 void StartDebug()
 { 
  _CrtSetDbgFlag( _CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF );
 }

int main()
{  
 StartDebug();  
 
 char* s1;   
 char* s2;  
 s1 = new char[128];  
 strcpy(s1, "string1");  
 s2 = new char[256];  
 strcpy(s2, "string2");     
 
 delete[] s1;     
 return 0;
}
 


디버그 상태로 실행하고 실행파일이 종료되면.. 밑에쪽 VC++ 컴파일러 메세지창에
이런식으로. 나옵니다.. (VC++6에선 다 영어로 나옴)
----------------------------------------------------------------------------
'debug.exe': 'C:\temp\debug\Debug\debug.exe' 로드, 기호가 로드되었습니다.
'debug.exe': 'D:\WINXP\system32\ntdll.dll' 로드, 기호가 로드되지 않았습니다.
'debug.exe': 'D:\WINXP\system32\kernel32.dll' 로드, 기호가 로드되지 않았습니다.
Detected memory leaks!
Dumping objects ->
c:\temp\debug\main.cpp(25) : {44} client block at 0x003710B0, subtype 0, 256 bytes long.
Data: <string2         > 73 74 72 69 6E 67 32 00 CD CD CD CD CD CD CD CD
Object dump complete.
'[3340] debug.exe: 기본' 프로그램이 0 (0x0) 코드에서 끝났습니다.
----------------------------------------------------------------------------
위에 내용에서..

c:\temp\debug\main.cpp(25) : {44} client block at 0x003710B0, subtype 0, 256 bytes long.
Data: <string2         > 73 74 72 69 6E 67 32 00 CD CD CD CD CD CD CD CD

main.cpp의 25번째 줄에서 new한 256바이트가  해제 안했다고 그러네여
delete 잘 까먹고 안하는 분들은 필수!! ^^;;


------------------------------------

가장 간단한 방법이군요.


파일명, 라인정보를 보여주는 에러 메세지 박스 만들기
에러가 생겼을때 보통 메세지 박스로 어떤 에러인지 내용을 뿌려주죠..
근데 소스파일이 많아지면, 이게 어느 소스 파일의 어느 부분인지 금방
찾기가 힘들잖아요...

그런데 #define 스크립트를 이용하면 쉽게 파일명과 줄번호가 출력되는 메세제 박스를
만들 수 있습니다..
복사해다가 컴파일 해보시면 금방 어떤건지 알 수 있습니다..
설명없음 ^^;;
아마 윈도우용 컴파일러에서는 다 될거예여.


코드:
#include <stdio.h>
#include <windows.h>
#include <stdarg.h>
void ShowMessage(const char* strFormat, ...)
{
static char strBuff[512];
va_list args;
va_start(args, strFormat);
vsprintf(strBuff, strFormat, args);
va_end(args);
MessageBox(0, strBuff, "메세지", MB_ICONERROR);
}
#define SHOW_ERROR(Msg) {

ShowMessage("%s(%d) %s \n", __FILE__, __LINE__, Msg );
}




#define CHEAK_ERROR(Flg)
{
if (!Flg)
ShowMessage("%s(%d) %d \n", __FILE__, __LINE__, Flg );
}



int main()
{
char* s = NULL;
CHEAK_ERROR(s);
if (s == NULL)
{
SHOW_ERROR("에러!!! NULL이야~");
}
return 0;
}


* Ronie.Kang : 개인적으로는 Debug Level에 따라서 출력이 되도록 수정하는 것도 좋을 것 같습니다
                      또한 가변인자를 활용하여 여러가지의 값을 가지도록 만들어 보아요~!


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