* 이 내용은 http://darkblitz.tistory.com/101 사이트의 내용을 참고하였습니다.

windows app를 debugging 할 때 console창이 편할 때가 있습니다.

머 굳디 TRACE를 macro를 쓰고 싶지 않을 때라던가 -_-;;

아니면 저는 다른 시스템에서 TRACE를 쓰고 있으면 내용의 분리를 위해서라도 Console을 애용하는 편입니다.

OutputDebugString은 DbgView를 띄우기가 귀찮고, VS의 output은 너무 작고 해서요-_-;;

여태까지는 AllocConsole을 이용했었는데, 오늘 새로 찾아보니 훨씬 간단한 방법이 있군요.

Windows Application에서 다음 줄을 추가합니다.

#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")

굳이 AllocConsole, Free Console을 하지 않아도 Console 창이 나오는 군요.

잘 쓰겠습니다 ;)

'Programming > Knowledge Base' 카테고리의 다른 글

MFC에서 Console 창 띄우기  (2) 2008.07.28
Structure packing  (0) 2007.05.16
Posted by yunseong
NSString 객체를 만들 때, 참 햇갈리는게 있더군요 -_-;;

한동안 MFC와 C언어만 하다보니, java같은 개념은 다 까먹은 듯 합니다 ㅠㅠ

어쩄든 오늘 삽질 한 결과는 다음과 같습니다.

1. @"abcde" 이렇게 상수형 문자열은 객체가 아니기 때문에 retain count가 없습니다. 없는 건 아니고 쓰레기값...
2. XXXWithString 계열의 함수는 parameter로 입력된 NSString객체를 참조합니다. 즉 2개의 포인터가 하나의 객체를 보게 되어 parameter로 입력된 NSString 객체는 retain count가 1 증가하게 됩니다.
3. XXXWithFormat 계열의 함수는 parameter로 입력된 NSString객체의 값을 복사합니다. 즉 parameter로 입력된 NSString객체의 retain count는 변화가 없으며, 새로운 객체가 생성되는 것 입니다.

오늘 몇시간 동안 삽질해서 알게 된 내용이네요 -_-;;;



080815 수정
StringWithFormat함수는 내부적으로 autorelease pool을 사용하는 것 같습니다. autorelease pool을 만들지 않은 상태에서 호출하면 error가 발생하는 군요. 그 말은 임시 NSString 객체를 만들 때 메모라 할당과 해제를 신경쓰지 않아도 된다는 것인데... iPhone 프로그래밍에서는 못써먹는 건가 봅니다 -_-;;
Posted by yunseong

머 제목은 매우 거창합니다만 ㅡㅡ;;

Cocoa framework의 Objective-C는 C와는 다른 메모리 관리 mechanism을 가지고 있습니다.
바로 retain / release를 통한 메모리 관리인데요, 쉽게 말하면 reference count를 통해
메모리를 해제할 지 말지를 결정하는 것입니다.

예전에 학교 다닐때 memory leak관련해서 연구할 때 이거와 관련된 내용을 공부한 적이 있는데,
실제 이 방식으로 동작하는 언어가 있는 줄은 몰랐네요.

어쨌든 오늘 이 내용을 공부도 하고 이것저것 실험도 해봤는데요, 사실 엄청나게 삽질을 했습니다.

다름이 아니라 NSString 객체를 이용하여 테스트 했는데, NSString객체도 잘 모르는 상태에서
이것저것 하다 보니 완전 삽질만 했습니다.

어쨌든 내린 결론은, Release도 함부로 하면 안된다는 것입니다. ㅡㅡ;;

NSObject의 dealloc을 override하여 사용해 봤는데, 멤버 변수를 dealloc에서 release시키면,
main함수의 AutoReleasePool이 drain할 때 오류가 발생하더군요.
모든 멤버변수는 dealloc내의 super dealloc에서 모두 알아서 release하나 봅니다.

물론 자체적으로 release시키고, nil로 값을 셋팅해주면 nil은 super dealloc에서 호출되는 release를 무시할 것이기
때문에, 큰 문제는 없어보이겠지만, nil에 message를 던지는 것은 가급적 피하려고 하고 있습니다. 나중에 bug를 만들어낼 거 같아서요.

어쨌든!!!
아무리 dealloc을 override했어도, 멤버변수가 가리키는 객체는 강제로 release시키지 말자는 게 오늘의 교훈이었습니다. 근데 맞나 모르겠네요 -_-;;;
Posted by yunseong

Macintoshi를 쓴지 벌써 1년 가까이 됐습니다.

여태까지 Mac에 대해 공부해야지 해야지 하다가 이제서야 책을 사고 보기 시작했습니다.

그런데... 책이 출간된 이 후에 Macintoshi의 IDE인 Xcode가 새 버젼이 나와버려서 책에 있는 내용이랑은

꽤 변했습니다. 사실 간단한 GUI도 못만들겠더군요 ㅡㅡ;;

다행이 web검색을 통해서 간단한 Reference를 찾았습니다.

http://www.vimeo.com/366398

GUI를 만드는 기본적인 방법은 알겠는데 아직 내부는 잘 모르겠습니다. ㅎㅎㅎ

종종 정리해서 올려야 겠지요 ㅎㅎ
Posted by yunseong
Software Testing의 목적은...

1. Test는 결점을 찾기 위한 목적으로 프로그램을 실행하는 과정이다.
2. 좋은 test case는 아직 발견되지 않은 오류를 찾아내는 데 높은 가능성을 가지는 것이다.
3. 성공적인 test는 아직 발견되지 않은 오류를 찾아내는 것이다.


라고 Glen Myer가 제시했다고 하는군요 ㅎㅎ


1. Software test is program execution process to finding defects.
2. Good test case have more higher possibility to find hidden defect.
3. Successful test should be find hidden defects

Glen myer said. ;)

'Software Testing' 카테고리의 다른 글

Software Testing 목적 (Purpose of Software Testing)  (1) 2008.02.19
Posted by yunseong

컴파일러에 따라서 구조체의 align을 맞추기 위해 packing하는 경우가 있습니다.
이경우 예상치 못한 구조체의 크기때문에 문제가 발생할 때가 있습니다.

예를 들면, 다음과 같은 코드를 실행해 봅시다.

#include <stdio.h>

typedef struct
{
 char cFoo;
 int nFoo;
}Foo;

void main()
{
 Foo stFoo;

 printf("%d\n", sizeof(stFoo));
}

코드상으로 보면, 해당 구조체의 크기는 5Byte가 되야 하지만, 실제 돌려보면 5byte가 나오지 않을 수 있습니다. (저는 8byte가 나오는 군요)

이는 컴파일러의 오류가 아니라, compiler가 메모리 align을 맞추기 위해 임의로 약간의 버퍼를 구조체에 추가하여 생기는 현상입니다. 이를 packing이라 합니다.

네트워크관련 프로그래밍에서는 이런 이유로 프로토콜이 깨지는 현상이 발생할 수도 있습니다. 이렇게 컴파일러 임의대로 pack을 하는 현상을 막기 위해 다음과 같은 코드를 다음과 같이 작성합니다.

#include <stdio.h>

#pragma pack(push, __Identifier, 1)

typedef struct
{
 char cFoo;
 int nFoo;
}Foo;

#pragma pack(pop, __Identifier)

void main()
{
 Foo stFoo;

 printf("%d\n", sizeof(stFoo));
}

#pragma ~~ 의 코드가 추가되었습니다. 이제 돌려보면 정확하게 5라는 숫자가 출력이 됩니다.

추가된 코드의 설명은 다음과 같습니다.

#pragma pack (push, __Identifier, 1)  <-- 스택에 현재의 packing 단위를 __Identifier로 저장하고 이 후부터는 1Byte로 align을 맞춘다.

......

#pragma pack(pop, __Identifier)  <-- 스택에서 __Identifier라는 이름으로 지정된 packing정보를 pop하여 복구한다.

packing은 네트워크 programming에서 프로토콜의 크기를 맞추기 위해 많이 사용된다고 합니다. 참고하세요~

'Programming > Knowledge Base' 카테고리의 다른 글

MFC에서 Console 창 띄우기  (2) 2008.07.28
Structure packing  (0) 2007.05.16
Posted by yunseong
2007.03.18 23:57

오랫만에 쓰네요. 며칠만인지 모르겠습니다. 퇴근후에 쓰려고 하는데 귀차니즘 때문에 하루에 한시간 내는 것도 만만치 않네요. ㅡㅡ;;

먼저 Hello world를 출력해보겠습니다. 그러려면 프로그래밍을 할 수 있는 환경을 구축해야 하겠죠?
그와 관련해서 책에는 다음과 같이 나옵니다.
'perl programming을 하는데 어떠한 IDE 툴도 필요치 않다. 물론 상용화된 제품이 있긴 하지만 우리는 이를 전혀 추천하지 않는다' 라고 책쓴사람이 말했습니다. ㅡㅡ;; 그래서 저도 notepad 펼쳐 놓고 할랍니다. ㅋㅋ

다음과 같은 코드를 작성합니다.

#!Perl
print "Hello Perl world!!\n"

파일 이름은 마음대로 합니다. perl의 소스파일은 별다른 확장자가 필요 없습니다만, plx (PerL eXecutable)로 하는 것도 한 방법이라고 합니다.

위의 소스코드를 보면 1번째 줄은 대충 눈치챘겠지만 주석입니다. ㅡㅡ;;  #는 해당 라인을 주석처리합니다.
그리고 print는 콘솔에 출력. 매우 쉽습니다. ㅡㅡ;;;

그리고 책을 보면 코드의 컴파일에 대해 나옵니다. 컴파일을 할 수는 있겠지만, perl은 script언어이고, 그렇기 때문에 C나 java처럼 코딩하고 디버깅하고, 배포하고 하는 등의 일을 적절치 않다고 말하고 있습니다. perl로 너무 많은 것을 하려면 성능적인 면에서도 문제가 있다고 하고요. 그래서 바이너리로 배포하는 것은 부정적으로 말하고 있네요.

그럼 다음에 또 쓰겠습니다. (내일 출근때문에 급마무리 합니다 ㅡㅡ;)

'Programming > Perl' 카테고리의 다른 글

Hello World!!  (0) 2007.03.18
Perl Programming start  (0) 2007.03.06
Posted by yunseong
Perl programming은 예전부터 해보려고 했었습니다. 하지만 책만 사다놓고 해야지 해야지 하다가 벌써 책을 산지 1년이 넘은 것 같네요. ㅡㅡ;;; 이제는 조금씩이라도 공부해서 그 기록을 남기려 합니다.

다른사람들에게도 도움이 될수 있을까요? ㅋㅋ

우선!! perl을 공부하려면 perl을 깔아야겠지요.
지금 제가 linux나 unix환경이 없어서 (Windows Vista 사용 중) Windows용 perl을 설치했습니다.

설치 binary를 다운받는 곳은 다음과 같습니다.

http://www.perl.com/download.csp

위의 사이트에서는 source code도 받을 수 있습니다. 제 PC는 AMD 64bit이기 때문에 해당 binary를 다운받았습니다.

설치가 정상적으로 종료되고 나면, command 창에서 perl -v 를 입력해 버젼 정보가 잘 나오는지 확인합니다.

잘 나오면 설치는 완료된 것입니다.

아!! 우선 저는 O'ERILLY 사의 Leraning Perl이라는 책을 바탕으로 공부하려고 합니다. 근데 원서라 얼마나 잘 할수 있을지 모르겠네요 ㅎㅎ

그럼 다음엔 perl을 공부하는 이유와 perl의 장단점을 써보겠습니다. ㅎㅎ (사실 오늘 퇴근을 늦게 해서 ㅠㅠ)

'Programming > Perl' 카테고리의 다른 글

Hello World!!  (0) 2007.03.18
Perl Programming start  (0) 2007.03.06
Posted by yunseong
2007.03.05 22:28
blog는 예전에도 잠시 했었는데 맨날 흐지부지하다가 이번에야 말로 제대로 해보려고 만들었다.
생각해보면 많은 일이 그렇게 흐지부지하게 지나갔다. 예전에 (갓 복학했을 때) 모든 일에 의욕적이고 열심이었는
데, 어느새인가 제자리에 오랫동안 서있었던것 같다.
이제는 다시 앞으로 갈때라는 생각이 든다. 꽤나 오랫동안 쉬었으니, 오랫동안 서있었던만큼 빨리 나아가야 겠다. :)

'About me' 카테고리의 다른 글

1달 늦은 2009년 다짐  (2) 2009.01.31
Season 2 START!!  (2) 2007.03.05
Posted by yunseong
TAG 시작
이전버튼 1 2 3 4 이전버튼