switch문의 비밀(?)
2006/06/28 09:15

IF/ELSE를 쓸까 switch를 쓸까 고민했던적도 있었고...
switch문을 쓸때 왜 상수밖에 안될까? 아래와 같이 문자(열)도 사용할수 있으면 좋을텐데라고 생각해본적도 있었고...

string szRet = "success";
swith(szRet)
{
  case "success":
  ...
  break;
}

아래와 같은 if/else 구조는 O(n)의 복잡도가 된다.

if(조건)
{
...
}
elseif(조건)
{
...
}
elseif(조건)
{
...
}
n개의 if/else 반복...

마찬가지로 switch 문을 사용해보자.

switch(staus)
{
case 1:
...
break;
case 2:
...
break;
case 3:
...
break;
...  n개의 case 문
}

우리는 마찬가지로 O(n)의 복잡도를 가질거라고 상상하지만...
컴파일된 어셈블코드를 보면 이야기는 달라진다.
물론 case문이 3개 이하거나 case와 case 사이의 차이가 현격히 차이가 날경우 if/else 구조와 같이 비교/점프 코드를 생성한다.
그외의 경우는 jump table을 생성하고 switch 에 입력된 상수로 jump table에서 jump address를 얻어 바로 점프하는 O(1)의 복잡도를 갖는다.

바로 여기서 처음에 가졌던 의문, 두가지가 동시에 해결된다.
즉, 결론을 말하자면...
효율성을 따져 4개 이상의 if/else를 사용하게 된다면 switch문을 사용한다.
(case 0; case 1: 과 같이 가급적이 연속적, 순차적으로 사용하는게 좋겠다.)

만약 switch에서 문자열이 사용가능했더라면 어땠을까? 편리하기는 했어도 일일히 비교하고 분기하는데 힘(?)을 너무 써버려 배보다 배꼽이 더 커진 결과를 초래했을것이다.

O 표기법
알고리즘의 효율을 나타낼때 쓰는 표기법으로 얼마나 복잡한가를 나타낸다.
알고리즘의 연산차수가 여러개 있다면 가장 복잡한(차수가 높은) 항목으로 나타낸다.
즉 N^2+*2*N+N 과 같은 식에서 N^2를 선택해 O(n^2)와 같이 표기한다.

참고사이트
미돌이님 O표기법
위키백과의 대문자 O 표기법
이창연님 블러그
데브피아의 switch에 관한 게시물

코드와 디스어셈블

more..

2006/06/28 09:15 2006/06/28 09:15
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • 제수리 2006/06/29 09:20  댓글주소  수정/삭제  댓글쓰기
    음.....쉽다...
    IT인간에게 이쯤은...ㅋ

  • Header file 에 관해서...
    2006/06/22 11:30
    #include <stdio.h> 와 #include "stdio.h" 의 차이점은?
    #include <string.h>와 #include <string> 의 차이점은?
    #include <string.h>와 #include <cstring> 또는 <string>의 차이점은?

    누가 이렇게 물어보면 답해줄수 있어?

    #include "..."와 #include <...>의 별 차이는 없다.
    주로 개발자 본인 만든 header 파일의 경우 "..."로 표기하고 표준 헤더 파일일 경우 <...>와 같이 표기한다.
    컴파일러는 "..." 와 같은 헤더는 현재 폴더(작업중인 폴더)에서 찾고 없으면 표준 헤더 파일이 저장되어 있는 곳에서 찾는다. 하지만 <...>로 되어 있으면 포준 헤더 파일이 저장되어 있는 곳에서만 찾는다.
    보다 자세한 내용보기

    예전 C와 C++에서는 #include <iostream.h>와 같이 사용했으나...
    같이 사용하는 혼란에서 벗어나고자(?)...
    C++에서는 아래와 같이 사용하기로 표준으로 정했다...
    #include <iostream>
    using namespace std;

    로 변경해서 사용한다.

    마지막으로 header 파일이 C에서 C++로 넘어오면서 바뀐부분이 있다면 #include <math.h>#include <cmath>와 같이 사용한다.

    보너스로...
    C++에서 main은...void main()과 같이 선언할수가 없다.
    main()
    {
    ...
    }

    마지막 부분에 return 0; 가 없어도 생략 된걸로 표준안이 정해졌기 때문이다...

    C++ 기초 책을 사면 맨~ 앞장에 나온 이야기들...
    아니 이걸 모르고...
    어떻게 프로그래머라고 그래?
    응? 반성하라고...버럭버럭...

    날...찔리지?
    2006/06/22 11:30 2006/06/22 11:30
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • TWEETY 2006/06/22 13:25  댓글주소  수정/삭제  댓글쓰기
    날...찔리지?? ???? -_-?
  • 제수리 2006/06/22 18:50  댓글주소  수정/삭제  댓글쓰기
    몹니까 이건...모르는말이 많이 나와서 홈피 에러난줄알았슴..ㅡㅡ^

  • warning C4996: deprecated...
    2006/06/21 15:48
    난데없는...warning...
    분명 Visual Studio C++ 6 에서는 잘되던게...
    .\autocopyDlg.cpp(221) : warning C4996: 'wcscpy'이(가) deprecated로 선언되었습니다.
    1>        C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(250) : 'wcscpy' 선언을 참조하십시오.
    1>        메시지: 'This function or variable may be unsafe. Consider using wcscpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'

    아주 당황스럽다...
    물론 wcscpy_s 로 바꾸던가 #define _CRT_SECURE_NO_DEPRECATE 1 로 define 하거나  #pragma warning(disable:4996) 하면 안볼수도 있지만...웬지 찝찝...
    일부 VisualStudio에서 #define _CRT... 로 해도 warning을 볼수 있는데 직접 프로젝트 속성(ALT+F7)에 /D "_CRT_SECURE_NO_DEPRECATE"를 직접 입력하면 된다...제길...
    ...
    wcscpy(temp,szPath);
    ...

    이 구문인데...temp와 szPath 모두 TCHAR에 같은 배열크기로 지정되었음에도 불구하고...
    도대체 왜? 아래는 MSDN에서 오류메세지에 대해 설명했다...
    오류메세지
    'function'이(가) deprecated로 선언되었습니다.
    'function': was declared deprecated
    컴파일러에서 deprecated로 표시하지 않은 함수를 발견했습니다. 이 함수는 이후 릴리스에서 제공되지 않을 수 있습니다. 다음 예제와 같이 warning pragma를 사용하여 이 경고를 해제할 수 있습니다.
    C4996은 함수를 선언한 줄과 사용한 줄에서 발생합니다.
    <hash_map> 및 <hash_set> 헤더 파일의 멤버를 std 네임스페이스에 사용하면 이 경고가 발생합니다. 자세한 내용은 stdext 네임스페이스를 참조하십시오.
    일부 CRT 함수는 보안이 강화된 새 함수로 대체되어 더 이상 사용되지 않습니다. 더 이상 사용되지 않는 CRT 함수에 대한 자세한 내용은 Security Enhancements in the CRT를 참조하십시오.
    보안상의 이유로 더 이상 사용되지 않는 MFC나 ATL 함수를 사용하는 경우에도 C4996이 발생할 수 있습니다. 이러한 경고가 발생하지 않게 하려면 _AFX_SECURE_NO_DEPRECATE_ATL_SECURE_NO_DEPRECATE를 참조하십시오.


    처음엔 언듯...이해가 안되더라니...번역이라고 해놓은게...
    프로그래머가 해놓은 번역이 아닌건 확실해....ㅜㅜ
    deprecate의 사전전 의미...네이버에서 발췌


    결론은 보안상 또는 Upgrade로 인해 다음 버전에서는 지원을 안할수 있으니 조심하라는 의미...
    제길...
    2006/06/21 15:48 2006/06/21 15:48
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

    1. Subject: #prama 로 deprecated 에러:4996 무시해버리기.

      Tracked from 지나간 삶 2007/04/08 10:33  삭제

      http://www.winapi.co.kr에 문법에 관한 설명은 어느 정도 되어 있다.oncepackwarning#pragma warning (disable:4996) //2005의 deprecated에러를 무시한다.를 추가한다면 에러자체를 띠우지 않을 수 있다. stdio.h 헤더파..

  • TWEETY 2006/06/22 08:41  댓글주소  수정/삭제  댓글쓰기
    호오~ 유용해..

  • 구글달력과 SKYPE
    2006/06/15 09:46

    구글메일...구글어스...에 이은 구글 달력...
    구글에서 또 사고치지 않나 싶다...
    그동안 수많은 일정관리 프로그램을 써봤지만 딱히 맘에 드는게 없었다...
    그나마 마이크로소프트의 아웃룩이 제일 낳지 않았나 싶다...하지만 집과 회사 어디에서 쓰기에는 싱크라는 기능이 부족했다...
    하지만 구글 달력은 인터넷이 되는곳이면 어떤 설치 프로그램도 필요없이 모든 기능을 지원한다.
    와우~....
    뿐만 아니라 달력을 공개하여 다른 사람들과 공유할수도 있으며 특정약속은 안보이도록 지정할수도 있다. 더구나 API를 제공해서 자기 홈페이지에서도 활용할수 있다는데...(내 홈에도 적용해봐야겠어...)

    전에 있던 회사에서 개발팀간 스케쥴 조정을 아웃룩으로 했는데...
    구글달력으로 충분히 할수 있겠다...시도해 볼만한 가치가 있다.
    예를 들면 회의시간을 잡을때 초대할 사람들의 스케쥴을 확인하고 빈시간에 맞춰 모든 사람들에게 초대 메일을 보내면 메일을 받은 사람들은 초대에 응하거나 거절할수 있다.

    구글 너무 멋진걸...


    또 하나 SKYPE...
    메신저라기 보다는...전화통화에 중점을 둔 프로그램...
    일단 SKYPE가 설치되어 있는 사람들끼리는 무료로 통화가 가능하며 최대 4명까지도 가능하다...이거 얼마나 유용한지 몰라...

    SKYPE out
    SKYPE가 있는 컴퓨터에서 일반 전화 또는 핸드폰으로 거는 것을 말한다.

    SKYPE in
    SKYPE 번호를 부여 받으면 외부에서 나에게 전화를 걸수 있다.

    일단 컴퓨터와 컴퓨터가 아닌 일반전화 또는 핸드폰으로 전화를 걸기 위해서는 Skype 크레딧 또는 쿠폰을 구매하여야 한다.

    요금안내


    한국 시내전화를 걸면 분당 23원...핸드폰으로 걸면 87원...
    일본으로 전화를 거는내 분당 28원...핸드폰으로 걸면 분당 180원정도...
    프랑스는 각각 25원...242원...
    이정도면 괜찮지 않을까 하는데...
    세상 참 좋아졌다니깐...

    자자...
    구글달력과 SKYPE를 등록해서
    저랑 달력을 공유하고...
    SKYPE로 전화통화를 해보아요...
    2006/06/15 09:46 2006/06/15 09:46
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • TWEETY 2006/06/15 11:24  댓글주소  수정/삭제  댓글쓰기
    내가 울 회사 거래선이 죄다 외국이길래.
    skype써보자니깐.. 어쩌구 저쩌구...
    안정성.. 어쩌구...하면서
    시대에 뒤떨어진 이야기를 하길래...
    넵! 비싼 전화세내는게 젤 안전합니다.
    라고 해줬어. -_-V

    근데, 구글 메일 쓰는 사람이 너무 드물어.. -_-^
    • hongyver 2006/06/15 13:17  댓글주소  수정/삭제
      전화요금 달라고 해서...
      SKYPE로 걸고...남는돈...너가져...
      구글 달력 등록했냐?
      함 공유 해볼까?
  • TWEETY 2006/06/15 15:57  댓글주소  수정/삭제  댓글쓰기
    어케 하는건데요?
    • hongyver 2006/06/15 16:32  댓글주소  수정/삭제
      CreateEvent할때...
      오른쪽 아래에 보면 Option에 보면 Privacy에 선택할수 있어

      달력관리 및 공유는...
      왼쪽 아래에 보면 manage calendars에 보면
      Share this calendar 를 보면 될듯...
  • 찬빠 2006/06/16 01:56  댓글주소  수정/삭제  댓글쓰기
    Skype나온지가 언젠데...
    벌써 다음이랑 제휴해서 뭔가 하고있긴한데요...
    http://skype.daum.net
    글쎄요...
    단말기쪽이 앞으로 기대되긴하는데 아직은 좀 이른듯...
    • hongyver 2006/06/16 08:39  댓글주소  수정/삭제
      SKYPE가 언제 나왔는데?
      TWEETY야...SKYPE를 우리가 몇년전 부터 썼는지 말해줘라...
      그리고 TWEETY가 다음이 싫데잖아...버럭 :(

      넌 쓰지마...
      ...하긴 넌 외국 나갈일 없으니 쓸일이 없긴 하겠다..:)

      구글달력은 안쓸텨? 고건 괜찮던데...자바알면 홈에다 붙이기(?)도 쉬울테고...뭐가 나올법한데..
      아무튼...내일 양떼목장 잊지마...또 늦잠자면 묻어버린다...
  • TWEETY 2006/06/16 08:29  댓글주소  수정/삭제  댓글쓰기
    그래서 전 다음이 싫어요.. -_-
    • hongyver 2006/06/16 08:40  댓글주소  수정/삭제
      구글 달력 공유 해봤더니...
      Privacy 한 글은 busy로만 나오더라...ㅋㅋㅋ
      아무튼...재밌겠어..
  • maro 2006/06/16 08:45  댓글주소  수정/삭제  댓글쓰기
    우와우와 ... 낼 양떼목장으로 출사 가는구나
    훔훔 ... !
    토요일은 정모땜시 꼼짝못하는뎅
    난 일요일에 혜화동이나 가야것구나

    SKYPE로 건 전화 받아봤는데
    깨끗하고 좋던뎅 ... 일반전화로 거는건 20원이라던데
    요즘 세상좋아욤
    외국에 있는 사람에게 문자도 보낼 수 있고 ㅎ ㅎ
    • hongyver 2006/06/16 09:44  댓글주소  수정/삭제
      계획은 양떼목장하고 추암...속초까지...돌아볼 생각이야...
      같이가면 좋은데..다른 지인들하고 가는거라...
      참..정모가 토요일이야? 원래 주중 아니였나?

      그게 궁금한데...외국에 있는 사람이...
      핸드폰을...한국 핸드폰을 들고 있어야 되잖아...그럼 로밍?
      아니면 annyeong 이렇게 보내야 하는 난감함이...;)
    • maro 2006/06/19 09:34  댓글주소  수정/삭제
      정모는 수요일인데
      기타 테스트같은건 토요일에 해서 .. ㅎㅎ

      그리고 문자 대화신청하면
      핸펀없이 문자를 볼수 있데요
      문자대화로 보내지만 않음 던 안나가공 ^^
  • TWEETY 2006/06/16 14:58  댓글주소  수정/삭제  댓글쓰기
    어딘가에 busy만 보이게 하는 옵션도 있었던거 같어요. ㅋㅋ 궁금했었는데... 내 스케줄은 어떻게 보이나 하구..
    좋긴 좋은거 같어. pda나 tablet pc같은거 들고 다니는 사람한테는 정말 유용할 듯. ^^

    난 아직도 종이수첩봤다.. pc봤다...postit에 적어놓은거 봤다.. 정신없어요..ㅋㅋㅋ (아날로그 사랑~)
  • 니하오마 2006/06/19 16:12  댓글주소  수정/삭제  댓글쓰기
    뭔 얘기들을 하는지 컴맹... -.-;
  • Boss 2019/10/08 09:22  댓글주소  수정/삭제  댓글쓰기
    Wielkie dzięki dla admina za tak obszerne rozwinięcie tego tematu. Dokładnie tego szukałam.
    Muszę przyznać, że bardzo zaciekawił mnie ten artykuły, mimo, że aż tak nie interesuję się tą problematyką. Zapraszam do mnie limuzyna do ślubu Łódź
  • Sebastian 2019/10/08 12:26  댓글주소  수정/삭제  댓글쓰기
    Siedzę w tej problematyce już kawał czasu, lecz bez wątpienia sam był tego lepiej nie scharakteryzował. Brawa dla autora tekstu. Zapraszam na moje www zdjęcia ciążowe Łódź.
  • Kisiel 2019/10/08 12:31  댓글주소  수정/삭제  댓글쓰기
    Zapraszam do mnie rękawice motocyklowe
  • Bansek 2019/10/08 14:20  댓글주소  수정/삭제  댓글쓰기
    Warto było poświęcić kilka chwilek na zapoznanie się z treścią, bo dużo dowiedziałem dowiedziałam się z tych wpisów. Odwiedź też moją stronę laptopy Łódź
  • Psycholog 2019/10/08 14:56  댓글주소  수정/삭제  댓글쓰기
    Wielkie dzięki dla admina za tak wyczerpujące rozwinięcie tematu. Właśnie tego poszukiwałem.
    Muszę przyznać, że ogromnie zainteresował mnie ten teksty, pomimo, że aż tak nie interesuję się tą problematyką. Zapraszam do odwiedzenia mojej strony Psycholog Dziecięcy Łódź
  • Kuba 2019/10/08 15:30  댓글주소  수정/삭제  댓글쓰기
    Autorowi należą się brawa za tak dogłębne zajęcie się tymi zagadnieniami. Zapraszam do mnie na stronę odwierty Łódź
  • Andrzej 2019/10/08 17:37  댓글주소  수정/삭제  댓글쓰기
    Na prawdę warto było poświęcić chwilę na lekturę, bo dużo dowiedziałem dowiedziałam się z tych artykulików. Odwiedź też moją stronę Dentysta Łódź
  • AgenziaInvestigativa 2019/10/08 18:07  댓글주소  수정/삭제  댓글쓰기
    No, no za taki artykuł powinni przyznać literacką Nagrodę Nobla. A tak poważnie, to ogromne dzięki za rozwinięcie tematu i wytłumaczenie paru spraw. Zapraszam do mnie Detective Privato Bergamo

  • ASSERT와 Exception
    2006/06/14 09:38
    ASSERT
    ...는 내부 설계에 대하여 변수가 원하는 내용을 가지고 있는지 확인하는 데 사용한다. 라는게 사전적 의미이고 도대체 어디다 어떻게 써야 할지는 감이 안온다면 아래를 보자...

    int GetLen()
    {
        int size;
       ...
      return size;
    }
    int div(int a, int b)
    {
      int c;
      c=a/b;
      return c;
    }

    void main()
    {
        char *p;
        int size;
      int ans;

       ans = div(10,5);
     
    size=GetLen();
        p=(char *)malloc(size);
        strcpy(p,"test");
        free(p);
    }

    1. div 함수
    두수의 나누기를 위해서 div 라는 함수를 작성했다.
    main 에서 div 함수를 호출하여 10을 5로 나눈 결과 값을 돌려받는다. 아무문제가 없어 보이는가?
    만약 div(10,0)과 같이 함수를 호출한다면 에러가 발생할것이다.
    div 내에서 0으로 나눌수 없도록 하는것도 중요하지만 div 라는 함수를 사용하는 개발자들이 올바른 인자를 넘겨야 하는것이 보다 중요하다.
    여기서 우리는 div 함수 앞 부분에 ASSERT(b!=0); 이란 assert 조건을 추가 함으로써 div 라는 함수를 사용하는 다른 개발자들로 하여금 실수를 예방할수 있다.

    2. GetLen 함수
    GetLen 는 메모리 확보를 위한 길이 또는 크기를 돌려받는다.
    만약 길이 또는 크기가 0으로 돌려받아졌을 경우는 어떻게 될까?
    strcpy 또는 free에서 문제가 발생할 가능성이 많다.
    이 또한 우리가 리턴 전에 ASSERT(size!=0); 을 추가하여 불분명한 버그에서 벗어날수 있다.

    위의 2가지 예제로 모두 다 설명할수는 없겠지만 대략적으로 나마 ASSERT를 어디다 어떻게 써야할까의 막연함에서 조금이나마 탈피할수 있을것이다.
    사실 ASSERT를 어디다 어떻게 쓰는냐는 ASSERT를 쓰냐 안쓰냐 만큼의 중요한 문제이다.

    그 외에 좋은점으로....
    버그발생지점을 정확하게 파악할수 있고,
    협업에서 다른 개발자로 하여금 인수나 리턴값에 주의를 요하게 할수 있고,
    개발 자체가 버그 테스트로 버그를 줄일수 있다.

    주의사항
    ASSERT내에는 가급적 하나의 조건식을 사용하고 릴리즈때 영향을 주는 코드 삽입 금지하도록 한다.
    외부 데이터 입력 변수에는 사용하지 않는다.
    메모리 할당 결과, 파일 열기 결과를 ASSERT 하지 않는다.
    (파일이나 메모리의 할당 실패는 assert를 발생하는게 아니라 에러메세지 박스를 출력해서 사용자로 하여금 조치를 취하도록 해야 한다.)


    EXCEPTION 예외
    ...란 의도한대로 프로그램이 진행되지 않고 다른 상황으로 흐름이 진행되는 상황을 할한다. 이런 예외가 발생했을때 적절한 조치를 취해줄 수 있는 절차를 구현하도록 문법을 정리해 놓은 것이 예외처리이다.

    우리가 흔히 if 처리했던 작업들이고 또 if문으로도 충분히 처리할수 있는 작업들이다. 그럼 왜! 예외처리를 사용하는가? 아래를 보자...

    예외처리를 하지 않은 경우...

    void main()
    {
        int x,y,r;

        printf("x 좌표 입력 : ");scanf("%d",&x);
        if (x < 0) {
             printf("%d는 음수이므로 잘못된 값입니다.\n",x);
             exit(-1);
        }
        printf("y 좌표 입력 : ");scanf("%d",&y);
        if (y < 0) {
             printf("%d는 음수이므로 잘못된 값입니다.\n",y);
             exit(-1);
        }
        printf("숫자 입력 : ");scanf("%d",&r);
        if (r < 0) {
             printf("%d는 음수이므로 잘못된 값입니다.\n",r);
             exit(-1);
        }

        gotoxy(x,y);
        printf("%d의 제곱근은 %.4f입니다\n",r,sqrt(r));
    }

    예외처리를 한 경우...

    void main()
    {
        int x,y,r;

        try {
             printf("x 좌표 입력 : ");scanf("%d",&x);
             if (x < 0) throw x;
             printf("y 좌표 입력 : ");scanf("%d",&y);
             if (y < 0) throw y;
             printf("숫자 입력 : ");scanf("%d",&r);
             if (r < 0) throw r;
        }
        catch(int a) {
             printf("%d는 음수이므로 잘못된 값입니다.\n",a);
             exit(-1);
        }

        gotoxy(x,y);
        printf("%d의 제곱근은 %.4f입니다\n",r,sqrt(r));
    }

    코드가 직관적이고 놀랄만하게 코드가 읽기 쉬워졌다. 프로그램의 안정성과 유지, 보수의 편의성은 증가하지만  프로그램이 비대해지고 느려지는 반대 급부를 쉽사리 무시할 수는 없다.


    2006/06/14 09:38 2006/06/14 09:38
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다


    양방향 트러스트가 없는 Remote Debugging...
    2006/06/08 09:49

    VMware를 이용하여 리모트 디버깅을 시도...
    회사에서는 도메인에 로그인 하기 때문에 VMware를 이용하여 리모트 디버깅을 하는데...
    전~혀...문제가 없었지만...
    도메인 로그인을 하지않는, 즉, <양방향 트러스트>[footnote]트러스트는 도메인 간에 설정되는 관계로 특정 도메인의 사용자를 다른 도메인의 도메인 컨트롤러가 인증[/footnote]가 없는 일반 환경에서...
    리모트 디버깅을 하려고 프로세스에 연결을 시도 했더니...
    도메인에 연결은 되는데 무슨일인지 권한이 없다는 메세지...

    + Visual Studio.NET
    이곳에 에서 확인한대로 설정을 해보아도...안된다.
    문제는 바로 계정...
    양쪽 계정이 같아야 하고 거기다 또 비밀번호가 없으면 안된단다.
    그래서 Administrator 계정을 만들려고 보니까?
    이 계정이 이미 존재한다네?
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList 에 Administrator라는 키를 REG_DWORD로 만들고 1로 설정했더니 사용자 계정에서 보인다...(빌어먹을...)
    혹 Windows XP pro를 설치했는데 Administrator 계정으로 로그인이 안된다면 이 registry를 설정해 보기를...
    아무튼 그렇게 둘다 계정을 Administrator로 주고 비밀번호를 같게 설정했더니 된다.
    노파심에서 당연 대상 컴퓨터에는 msvsmon.exe 이라는 리모트디버깅 서버를 실행해야 하는 사실에 VC++6, 2003, 2005에 맞는 버전이 있으므로 주의할것...(대부분 비주얼 스튜디오가 설치된 디렉토리에 있으므로 정확한 경로명을 모르면 파일찾기로 찾아도 된다.)

    + WinDBG
    이렇게 설정을 하면 WinDBG로도 디버깅이 가능한데, 비주얼스튜디어가 깔려있지 않은곳, 즉 현장에서 디버깅시 유용하겠다.
    단 VMware 또는 대상 컴퓨터에 WinDBG.exe, dbgeng.dll, dbghelp.dll 만 같은 디렉토리에 넣고 디버깅할 파일을 프로세스 attach 시킨후 콘솔에서 .server tcp:port=nnnn 과 같이 입력하면 원격에서 접속이 가능하다.
    File에 Connect to remote session에 browse를 눌러 대상컴퓨터의 이름을 입력하면 디버깅 서버가 보이므로 접속하면 디버깅이 가능하다.
    당연히 대상 컴퓨터에 실행파일과 pdb 파일이 존재해야한다.

    TIP
    매번 빌드할때 마다 실행파일 및 pdb 파일을 복사하기가 불편하다면 다른 방법이 있다.
    VMware의 컴퓨터 또는 대상컴퓨터의 C: 드라이버 또는 원하는 디렉토리를 네트워크 드라이버로 연결하면 드라이버명(예, Z: 와같은)으로 빌드이벤트의 빌드후이벤트를 이용해서 복사하면 매번 번거롭게 복사를 하지 않아도 빌드시 자동적으로 복사가 된다.

    기타 참고해서 볼만한 페이지들...
    마이크로소프트사의 디버깅에 관한 페이지
    http://msdn2.microsoft.com/ko-kr/library/d8k88a0k(VS.80).aspx
    VMware를 이용한 커널디버깅
    http://www.debuglab.com/board_detail.aspx?id=98&table=lecture&pagenum=10
    커널 디버거(WinDbg) 설치하기
    http://snoya.ye.ro/driver/windbg/windbg.html

    2006/06/08 09:49 2006/06/08 09:49
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다


    삼성노트북에 XP 설치시 문제점과 XP업데이트
    2006/05/16 09:06

    엊그제도 포스팅했지만...
    멀쩡하던 노트북 하드가 맛이 갔는지...
    영영 회복할 기미가 보이지 않아서 결국 10만원을 주고 새로 하드를 샀다.
    마침 귓빠진 날이라...이것저것 정신없는 와중에도 용산까지 가서 하드를 사고 충동구매도 하고...
    난리부르스...

    아무튼 하고 싶은 이야기는...그게 아니고...
    삼성노트북(P30)에 하드를 장착하고 XP부팅 CD를 넣고 부팅하면서 설치를 시도...
    파티션나누고 포맷을 하려는 순간...
    "메모리가 부족하거나 CD에 문제가 있어 포맷을 하지 못합니다. F3을 누르면 종료합니다."
    이런 메세지가 뜨고 OS설치 불가.
    난감난감 초난감...급하게 화장실에 들어가 볼일보고 휴지를 찾았을때 휴지가 없는것 보다 더 난감하다.
    마침 새로산(그래..나 또 뭐 샀어...) 평판 스캐너(필림스캔을 위한, GT-X900)를 테스트도 해봐야 하고...
    왜 포맷을 못하는것이냐...
    다른 부팅CD를 넣고 포맷 프로그램으로 했더니...잘되고 지라ㄹ...
    결국 FAT32로 포맷을 하고 윈도우 2000 부팅 CD를 넣어 설치를 한다음...
    겨우 인터넷만 되게 한다음 싸이의 파도타기 다음으로 놀라운 네이버 지식과 1시간의 사투끝에 얻어낸 결론...

    일부 삼성 노트북 모델이 포맷전...CDROM의 파워절약을 위해 파워를 차단하는데...
    여기서 CD를 읽지 못해서 벌어지는 현상...


    실제로 포맷시 CDROM을 뱄다가 다시 끼니 포맷을 하더라...

    아...삼성....
    담당자에게 항의 메일보내고, 피해보상요구하고, 각종 포탈싸이트에 글 올리고...
    또 뭐 있더라...
    하려다 참았다...

    그리고 업데이트를 하려고 했더니...
    인스톨할때 설치한 CDKEY가 안맞는다고 정품인증 실패래...
    업데이트를 안했더니 Kaspersky Anti Virus 바이러스 프로그램에서 Intrusion.win.dcom.exploit 이라는 해킹시도를 탐지하는 대화창을 자꾸 띄어서 아무일도 못하겠다.
    결국 구글링으로 알아낸 아주 간단한...
    XP 업데이트 방법
    [friend]
    C:\WINDOWS\system32 폴더에
    LegitCheckControl.dll 이라는 파일을 LegitCheckControl.old 로 변경하고 ( 익스플로러 창을 다 닫아야 함)
    다른 아무 dll 을 LegitCheckControl.dll 로 변경해주면 업데이트가 가능
    이건 익스플로러에더 도구->인터넷옵션->프로그램->추가기능관리에서 LegitCheckControl.dll 를 사용안함과 같은 효과를 가진다. 이렇게 안하는 이유는 MS에서 이 dll을 아예 사용안함을 체크할수 없도록 막아놓았기 때문이다.
    [/friend]



    망할 노트북 때문에...
    주말 잘 보냈삼...
    아 생일축하해준 지인들 탱큐...
    2006/05/16 09:06 2006/05/16 09:06
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

    1. Subject: 삼성노트북, XP설치중 포맷이 안될때

      Tracked from 알쯔의 외부기억장치 2006/10/14 02:48  삭제

      삼성노트북 사용자들은 한번쯤 겪어보았음직한 문제일듯하다. 본인의 서브노트북은 삼성노트북으로, 이번에 윈도우 재설치를 하기위해 XP시디를 준비하여, 늘상 하던것처럼 윈도우를 설치하..

    2. Subject: 삼성 노트북 windows xp 설치시 메모리 에러

      Tracked from NGWeb : 소프트웨어 엔지니어 NOTE 2007/10/10 14:17  삭제

      삼성 sens x05의 일부 모델에 xp pro를 설치할 경우 파티션 설정 이후의 진행에서 "메모리가 부족하거나 CD에 문제가 있어 포맷을 하지 못합니다. F3을 누르면 종료합니다." 메세지 출력 후 설치가 ..

  • 비밀방문자 2006/05/17 14:07  댓글주소  수정/삭제  댓글쓰기
    관리자만 볼 수 있는 댓글입니다.
    • hongyver 2006/05/17 15:18  댓글주소  수정/삭제
      근데...두번째 부터는...파일하나를 복사해서 넣어야해..
      필요하면...연락줘...
  • TWEETY 2006/05/18 08:53  댓글주소  수정/삭제  댓글쓰기
    나도 구글링해서 찾긴 했지만, 수동으로 update해주는 batch파일이 있던데요? 하기사.. 그것도 한계가 있긴하더라..ㅋㅋ / 좋은 팁이에요. ^^
    • hongyver 2006/05/18 09:09  댓글주소  수정/삭제
      이것도 한번 update 하면...두번째 부터는 안되더라구...
      LegitCheckControl.dll 이라는 파일을...바꿔주어야 하더라구..
  • 알쯔 2006/10/14 02:37  댓글주소  수정/삭제  댓글쓰기
    이야... 구글의 힘은 놀랍습니다. ㅠ
    저도 삼성노트북 사용후 윈도우 재설치과정중에 위와 같은 문제가 발생하기에, 비디오메모리와 공유해서 그런가보다 생각하곤 CMOS 에서 메모리셋업을 해야겠다는 생각, 그러다가 제 놋북에서는 지원하지않기에- FAT32 로 포맷을 해야하나... 라는 생각하던차 이 글을 보게 되었네요
    지금 포맷중입니다. ㅠ-ㅠ
  • 쭈니 2007/03/30 15:02  댓글주소  수정/삭제  댓글쓰기
    이거 보고 잘 깔고 있습니다
    좋은 정보 너무 감사합니다.
  • nona 2007/10/10 14:18  댓글주소  수정/삭제  댓글쓰기
    감사합니다. 덕분에 잘 해결하였습니다. ^.^
  • 부천백조 2007/12/31 19:05  댓글주소  수정/삭제  댓글쓰기
    사랑합니다.=_=
    저의 2007년 마지막 날을 악몽으로 안만들어 주셔서요...ㅜㅜ
    노트북이 너덜너덜해질때까지 이 은혜 있지 않겠습니다.ㅠㅠ
    하루에 CD 수십장 구워본게 난생 처음입니다. 아주 죽을맛이었어요. 으흑..
    감사..또 감사...
    복받으실거에요 으흐흐흐흐흐흑
  • phyon 2008/04/13 02:47  댓글주소  수정/삭제  댓글쓰기
    와 p30 포멧하다가 미칠번 밧는데 감사해요~ㅠㅠㅠㅠㅠㅠㅠ
    엄청 감사해요 ♡
  • 바람여울 2009/11/23 10:56  댓글주소  수정/삭제  댓글쓰기
    정말 감사합니다.
    포멧하다가 이런 일은 처음이라서 엄청 당황했는데 좋은 정보로 해결할 수 있었습니다.
    감사합니다.

  • TRAC과 Mantis
    2006/04/21 10:40
    요즘 버그&이슈 트래킹 시스템에 관심을 가지고 있어서...
    몇가지를 개인적으로 설치해서 써보려고 하고 있는데...
    마음에 드는 2가지...
    그게 TRAC하고 Mantis...

    TRAC은 Subversion과 연동이 되어 보다 편리하지만 설치가 까다롭다는 단점
    Mantis는 단지 Issue 트랙킹만을 위한 시스템. 직관적이고 설치가 쉽다.

    아무래도 Subversion과 연동이 되는 TRAC에게 눈이 가는게 사실...
    설치도 쉬워졌고 KLDP에서 한글화도 바로바로 된다.

    문제는 TRAC이든 Mantis든 사용법은 익히면 되는거고...
    실제업무에서 어떻게 활용하고 있는지가 궁금하다.
    어떤식으로 티켓(이슈 또는 버그)이 발행되는지...
    티켓 항목은 무슨내용들을 쓰는지...

    늘 느끼는거지만 사용법보다는 실무에 적용시키는게 어렵다...
    이로인해 사람들에게 무용론(?)이 대두되기도...
    어떻게 사용하는가...중요한 문제...

    서브버전의 디렉토리를 어떻게 나눌까...만큼이나 어려운 문제...
    이런건 1+1=2 처럼 명쾌한 답이 없다...

    TRAC
    예제

    http://gaedol.org/resources
    TRAC으로 관리하는 태터
    http://dev.tattertools.com/
    KLDP 한글화
    http://kldp.net/forum/forum.php?forum_id=3160
    윈도우에서 TRAC과 Subversion 및 Apache 설치
    http://aslongas.pe.kr/tt/index.php?pl=11
    http://jaso.co.kr/tatter/index.php?pl=63

    주의점

  • Apache와 Subversion 은 최신버전, Python은 2.3.5버전대를 설치하여야 한다.
  • Python을 삭제후 재설치하면 pysqlite-1.1.6.win32-py2.3.exe, mod_python-3.2.5b.win32-py2.3.exe, docutils-0.4, svn-win32-1.3.1_py.zip 를 다시 설치하여야 한다.
  • 근데 아직 Apache와 Subversion 연동을 못하고 있다...DAV에서 svn 디렉토리를 접근하면 permission 에러가...
  • 해결했음 - httpd.conf 설정 문제였음.
  • TRAC에서 검색하기 기능을 사용할수 없음...internal error 발생
  • 현재 KLDP 한글화에서 배포본이 문제가 있음. 영문버전은 문제없음. 2006.4.21 현재 0.95-ko 배포중지..

    각종플러그인 사이트
    http://www.third-bit.com/trac/argon/wiki

    http://trac-hacks.org/wiki/


    Mantis
    홈페이지

    http://www.mantisbt.org/index.php
    예제
    http://hongyver.pe.kr/mantis
    ID:guest PASS:guest (볼수만있음)

  • 2006/04/21 10:40 2006/04/21 10:40
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다


    Software 개발자들이여 람보가 되라!
    2006/04/18 08:57
    재밌는 기사가 실렸다.
    소만사(소프트웨어를 만드는 사람들)의 김대환 대표가 한말....
    람보가 되라 라는 말처럼 다소 극단적이긴 하지만 내용을 보면 공감이 가는글...
    그래도 누리꾼들의 수다꺼리가 되긴 충분해....

    최고의 소프트웨어 SW 개발자가 되기 위해서는 세상(업계)을 평정할 수 있는 람보
    ①자신의 분야서 도사가 돼라
    ②경쟁력을 최우선으로 생각하라
    ③눈앞이 깜깜해지도록 집중하라
    ④끊임없이 새로운 지식을 습득하라
    ⑤EQ를 늘려라

    자신의 경력과 팀을 망치는 개발자들
    ①크레믈린이 되는 개발자
    ②전문용어로 문제의 본질을 숨기는 개발자
    ③수건돌리기하는 개발자
    ④새로운 기술로 기존 코드를 새로 짜는 개발자다

    기사원문
    http://news.media.daum.net/society/affair/200604/07/segye/v12306191.html
    2006/04/18 08:57 2006/04/18 08:57
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다


    Memory leak!
    2006/04/05 09:12
    Visual Studio에서 프로그램을 작성하다보면 출력창에 아래와 같이 메모리 릭에 대한 정보를 볼수 있다.
    File명과 Line번호까지 나와있어서 디버깅시 많은 도움을 얻는다.
    (물론 마우스로 클릭하면 자동으로 그 라인까지 이동하는 hyper 기능도 지원!)

    Detected memory leaks!
    Dumping objects ->
    D:\Project\MemoryTest.cpp(60) : {73} normal block at 0x00374E58, 100 bytes long.
    Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
    Object dump complete.
    이와 같은 것이 가능한것은 아래와 같이 new 가 정의 되어 있기 때문인데 Visal Studio에는 그 이외도 malloc등과 같은 명령어도 이미 정의 되어 있다.
    잘 활용한다면 메모리 릭에대한 디버깅은 한결 수월해 질수 있다.

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    보다 자세한 내용은 위키페이지에서 확인하자.
    보러가기
    2006/04/05 09:12 2006/04/05 09:12
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • Yvette 2006/04/05 13:36  댓글주소  수정/삭제  댓글쓰기
    momory?????
    memory!!!
  • Yvette 2006/04/05 18:31  댓글주소  수정/삭제  댓글쓰기
    그새 수정하셨습니까? ㅋㅋㅋㅋ