« October 2005 | Main | December 2005 »
이번엔 진짜다. 미니덤프를 꼭 사용하자!
대부분의 어드밴스드 프로그래머(advanced programmer)-_-들은 프로그램의 비정상 행동에 대처하기 위해 콜스택(callstack)을 캡쳐하여 버그(Bug)를 잡을 것이다. 비정상 종료됐을때 콘솔이나 파일에 기록된 콜스택과 레지스터(register)의 정보를 토대로 디버깅하는 방법에 대한 테크닉들은 널리 퍼지고 잘 알려져있다. MSDN의 Bugslayer나 codeguru, codeproject 혹은 google에서 callstack으로 검색하면 산더미 만큼 나올 것이다. 이 콜스택에 대한 정보를 이용하면 일반적인 대부분의 비정상 종료를 대해 잡을 수 있다. assert를 이용해서 단순히 소스파일이름과, 줄번호만 가지고 잡던 시절에 비하면 이 것만으로도 디버깅을 위한 축복이다.
이 포스팅의 주인공 미니덤프(Minidump)는 디버깅을 수월하게 하기위해, windows xp 이후에 등장하였다. (엄밀히 말하면 2k와 xp사이에 ms가 내부에서 디버깅에 사용하던 것을 공개한듯 하다.) 2k를 포함한 이전의 윈도우즈에서 이를 사용하려면 최신버전의 dbghelp를 사용하면 된다. 미니덤프는 실제로 비정상 종료가 일어났을때의 일부 메모리에 대한 덤프를 저장하는 것이다. 여기에는 대부분의 쓰레드 정보, 각 쓰레드의 콜스택정보를 포함한다. 사실 일반 프로그램이라면 미니덤프까지도 필요 없고 비정상 종료가 발생한 콜스택만 가지고도 대부분의 디버깅이 가능하다. 하지만, 멀티쓰레디드 프로그램에서라면 상황은 달라진다. 프로그램이 그냥 죽어버리면 다행이겠지만, 프로그램은 죽지 않았는데 쓰레드끼리의 동기화 문제로 정상적으로 프로그램이 동작하지 않는 상황이 발생하는 것이다. 이에 스타베이션(굶주림,starvasion)이나 데드락(deadlock) 문제가 포함된다.
미니덤프가 평소에 별 도움을 주지 않아서 덤프만 남기고 잘 살펴보지 않으며 등한시 하였는데, 오늘 한달간 나를 괴롭히던 '데드락'을 미니덤프를 이용하여 잡았다. 마왕을 물리쳤다! -_-
최근의 업계 동향으로 따진다면, 쓰레드끼리 동기화를 해야하는 멀티쓰레디드 프로그래밍 패러다임 자체에 대한 회의가 짙은듯하다. 최근이라고 하기도 뭐하고 꽤나 오래전부터 이 '능률적인' 멀티쓰레디드 프로그램을 만드는 것은 어렵다고 알려져있다. 사실 멀티쓰레디드 프로그래밍은 조낸 쉽다. 그냥 동기화 객체를 쳐 발르면 성능하고는 관계없이 정상적인 동작을 수행한다. 하지만 '능률적인' 멀티쓰레디드 프로그램은 확실히 어렵다. (이러한 추세를 반영하는 것으로써 OpenMP가 있다. VS.Net 2k5에 포함되는걸로 알고있다.)
이것과 관계된 약간의 팁이라면, win32 structured exceptional handling을 이용하여, 아무때나 특정한 순간에 callstack과 minimap을 찍는 것이 가능하다. 그냥 잘못된 연산을 수행하고 recovery하면 된다. 자세한 문법은 msdn에 잘 나와있을 것이다. 위의 '마왕'은 데드락에 걸렸다고 판단이 났을때에, 미니덤프를 뜨고 그 미니덤프를 이용하여 각 쓰레드의 상태를 살펴보니 전부 락을 거는 소스코드위치에 쓰레드가 대기하고 있는 것을 보고 발견하였다. 다들 젓가락 한개씩 들고 있었다. -_-
fin.
HYPERTHREAD! 사실 제목과 반대다.
zdnet기사에 hyperthread가 오히려 퍼포먼스 저하를 야기한다는 기사가 실렸다. intel에서 하나의 cpu값으로 이론상 두배의 성능약 1.3배의 성능을 끌어낸다고 자랑하여 팔아왔던 hyperthread 기술은 쓰레기임이 판명났다. 이유인 즉슨, hyperthread가 L1과 L2를 공유해서 쓰는데 이 때문에 서로에 대한 배려가 없이 L1 과 L2을 thrash해 버린다는 것이다. 특히, 서버용 프로그램에서 hyperthread를 끄는 것보다 오히려 성능저하가 난단다. 이런 쓰레기 같은 기술이 있나! -_-; 확실한 점은, SQL Server는 hyperthread enabled된 컴퓨터에서 풀로드 시에 거의 성능 저하가 있다는 점을 알아두어야 한다.
금년 초에는 L1 & L2를 공유하는 것으로 인한 보안 문제(예를 들어 중요한 서버인데, 쓰레드 하나가 그 서버의 계정정보를 읽는 중이고 다른 한 쓰레드는 웹서버쓰레드일때, 웹서버 쓰레드(anonymous 권한)가 계정정보 쓰레드(어드민 권한)의 메모리를 볼수 있는 것 같은 문제)도 있었고, 일단 서버용 프로그램을 주로 돌리는 컴퓨터라면 hyperthread를 일단 끄는게 좋을 듯하다. hyperthread의 이점을 살리려면 메모리를 아껴쓰면 되겠다. 보통은 speed를 위해 memory를 많이 사용해서 trade-off 하는데 hyperthread가 켜져있다면 speed를 위해 memory를 사용하면, memory는 많이 사용하는데 속도는 그대로인 경우가 발생할지도 모른다.-_-
오랫만에 울티마6의 지도를 보고 감동을 받았다. 92년인가 93년인가, 나는 영어공부를 이 게임으로 했다고 해도 과언이 아니다. 지금 생각하면 상당히 웃긴, 옆구리에 영어사전을 끼고 플레이했다. 그 휴우증으로 난 다른 아이들이 모르는 영어단어들을 -_-알게 되기 시작했다. The False Prophet. 실제로 대화를 하고 있는 듯한 대화 시스템, 지금 생각하면 별것 아니지만, 대화량이 무척 많고 사람들과 대화하는 재미가 쏠쏠했다. Halberd, Iolo, Shamino, Dupre, Avatar, Rune. 8개의 미덕을 상징하는 8개의 마을, 하지만 세상은 수상하다. 동정(Compassion)의 마을에는 동정이 없고, 겸손(Humility)의 마을에는 겸손이 없었다. 마왕이 없는 엔딩이지만, 클리어한후의 감동은 잊을 수 없다. (라고 말을 썼지만, 기억이 나지 않는다. 감동을 잊었다. ┓- 오목, 볼록 렌즈를 복구하고 코덱스를 복원한 후에 뭔가가 있었던거 같은데?!?) 84메가나 되는 욽티마7 지도 역시 감동의 물결. -_-; 6에서 내가 구해준 소녀를 찾았나 했더니 말을 해보니 그 때 그 소녀가 자신의 할머니라나!! 아쉬운것은 기억나지 않는 사정으로 인해 플레이 중도에 하차해서 언젠가는 다시 클리어할 것이다.
아, 울티마 8 지도는 안나오려나, :) 마션 드림, 세비지 엠파이어! 또한 울티마이야기는 언제나 울티마온라인에 대한 아쉬운 추억으로 끝난다. EA 내 울티마 온라인 돌려줘!! 아니 그런데 이건 뭐지? EA에 대한 악감정으로 울티마온라인이 어떻게 망가졌나에 대한 히스토리를 찾아볼 심정으로 구글링을 했더니 이런것이 튀어나왔다. Ultima Online: Samurai Empire 대체!! 얼마나 내 울티마온라인을 망가트려야 울티마온라인을 놔줄꺼야! 그런데 해외에서는 아직도 돈이 되는건가? 이렇게 꾸준히 확장팩을 만드는 것을 보면-_-; 내가 거듭 말하지만,
돈이 되더라도 내가 인정하지 않으면 쓰레기다! ┓-
저 글을 쓸때 미처 생각하지 못하고 적지 못한 점이 있는데, 간과하고 있던 점은 어떠한 온라인 게임이던지 게임내의 샤드(월드)가 일정 시간(2달?3달 정도로 사료됨: 근거 없는 감) 이 지나면 뉴비(newbie, 새로게임시작하는사람)들이 게임내에 적응하기 힘들다는 점이다. 지금의 게임도 이것들이 심하게 적용되는데(ex. WoW), 특히 초기의 울티마 온라인은 pk에 대한 제제가 거의 없었고 죽음에 대한 패널티또한 컸기 때문에 더더욱 뉴비들은 살수가 없는 게임이긴했다. 그러한 것들을 해결하기위해 EA는 여러가지 pk에 대한 심한 제제를 가하기 시작했고 결국에는 한 샤드에서 pk가 불가능한 지역을 새로 만들고 그곳에서 게임이 시작하게 만들었다. 결국은 재미를 느끼려면, 게임이 처음 공개되었을때 다 같이 뉴비로써 시작하는 것! 혹은 게임시스템적으로 일정한 시간이 지나면 초기화와 비슷한 프로세스를 가지도록 디자인 되던지 (아직까지 그런 게임이 없으므로 현실적으로 적용되기 어려움), 주기적으로 새로운 샤드를 생성해서 뉴비들을 흡수해야 할것 같다. 이 문제는 10년전부터 온라인게임 커뮤니티(혹은 기획자 커뮤니티)에서 고민해왔던 문제인데 10년이 지나도록 탁월한 해결 모델이 없으므로 내가 고민할 문제는 아니다. 고로 나는 그저 기대할만한 새로운 게임이 나오면 잽싸게 다같이 뉴비로써 출발하는 재미를 즐기면 된다. 이러한 의미의 일환으로 나두 D&D Online 베타 테스터 할래요!!
편의점에서 믹스커피2개를 샀다. 엄밀히 말하면 믹스커피는 아니고, 그 믹스(혹은 믹스와 비슷한 기능성 물체)와 컵과 컵뚜껑 그리고 조리기구(혹은 단순한 온수기와 비슷한 기능성 물체)의 이용권을 같이 파는 스타일이었다. 당장 먹고 싶은 생각은 아니어서 그냥 컵과 믹스와 넓적빨대를 가지고 계산을 했다.
"손님, 이 제품은 매우 뜨거우니 조심하세요~♡"
응? 내가 혹시 물을 부어왔나? 한번 내가 산 물건을 눈으로 확인해보았다. 마치, 지하철 음료수 자판기에서 요금은 결제된 후에, 원하는 음료수는 나오지 않고 컵만 달랑 나온뒤에 "맛있게 드세요. 이용해 주셔서 감사합니다."따위의 친절한 음성 메세지를 들었을때의 공허함과 조금은 비슷한 느낌이었다. 덕분에 회사까지 오는 길에 '최신형 인간과 유사한 첨단 점원 로봇설'부터 시작하여 '화성인 지구 침공설'까지 여러가지 보편적이고 합리적인(?) 상상을 하게 만들었다.
그나저나 이거 분명히 오천원을 꺼내서 건내줬는데, 오천원 빼기 천삼백원은
fin.
"세상에는 두 종류의 사람이 있다: 세상을 두종류의 사람으로 분류할 수 있다고 믿는 사람과 그렇지 않은 사람"
세상에는 두종류의 캐릭터가 있다: 유니코드와 유니코드가 아닌 것들. 윈도에는 Unicode캐릭터셋과 "Unicode캐릭터셋이 아닌 캐릭터셋"이 있고, 실질적으로 윈도의 여러 장소에서 이 "Unicode캐릭터셋이 아닌 캐릭터셋"을 암묵적으로 Ansi라 부른다.
한글 cmd.exe 의 도움말 역시 영문 그대로 번역되어 있다.
/A 파이프 또는 파일로의 내부 명령어의 출력이 ANSI로 설정합니다.
/U 파이프 또는 파일로의 내부 명령어의 출력을 Unicode로
설정합니다.
첫번째 문구가 왠지 맘에 든다. :)
ps. "절대, '절대'라는 말을 쓰지 말라"
LG KV5900! 끄악! 대단한 디자인이다. 곧 나올 예정인 핸드폰으로 보인다. 기능이고 다 필요없고 디자인으로 먹어준다. -_-; 이 디자인을 보는 순간 DMB폰에 대한 후회를 처음으로 하였다. 슬라이드폰인데, 슬라이드를 열면 비명을 지를 수 밖에 없다.

아, 대박예감이다. 조금만 일찍 나왔으면 좋았을텐데 :( 올림푸스 MP3 플레이어의 디자인을 벤치마킹한 것 같긴하다. 역시 휴대폰 디자인은 엘지가 쵝오!
지인이 보내준 사진을 보고 순간 깜짝놀라서 허둥지둥 포스팅을 남긴다!
photo was stolen from cetizen
fin.
인류의 역사는 음악의 역사다. 음악에서 자유로운 사람도 없고, 종교도 없고, 국가도 없다. (근거없는 정의)
Romantic_Couch-Star_Loop_In_Seoul_Remix
보는 순간 주목효과를 노리고 온갖 색깔지랄 특수문자지랄을 해놓은 다음 게시판이 떠올랐다. 별표 무척 신경쓰인다. 보면 알겠지만, 별표에는 주목효과가 있다. 주목효과를 노리고 모든 사람이 별표를 게시물에 붙이면 어떻게 될까? 스팸메일을 보는거 같아 씁쓸하다. -_-
회사 기획자분 중에, 기획문서에 별표를 붙이시는 분이 계시다. -_-; 뭔가 물어볼때, "아! 그거 제 공유폴더에 오신다음에 별표만 따라오세요"라는 말을 가끔 듣는다. 별표가 붙어있는 문서 파일을 있으면 기분이 뭔가 착찹하다. 도대체 별표하고 문서 내용하고 무슨 관계인가! 아무 관계가 없는 것때문에 신경쓰이는 나도 이상하긴 하다. 나에게 파일을 보내는 모든 사람이 별표를 사용해서 보내면 어떻게 될까? 내가 소스파일이름에 별표를 붙이면 어떻게 될까?-_-;
프로그래머 A: JH씨 UTF8코드 완성형한글로 바꾸려면 어떻게 해요?
JH: 네, 거기 보면 별표(★)로 시작하는 소스코드 있어요. -_-;
위의 예제는 사실 같이 일하는 사람끼리니까 좀 어색-_-하긴 해도 "주목해주세요"라는 목적으로 상도-_-에 어긋나지 않는다.
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
99명의 사람이 사용하는 게시판이 있다. 새로 한명의 사람이 왔다. 그는 글을 쓸때 제목을 빨간색을 사용한다. 다른 사람들은 빨간색을 쓸줄몰라서 안쓰는줄 안다. 하지만, 다른 사람들이 그렇게 하지 않는 이유는 매너를 지키기 위해서다. 물론 일부 사람은 그렇게 사용하는 법을 모르는 사람도 있긴하다. -_-;
지인들끼리의 게시판에서는 하트와 별표를 시작으로 자주색, 분홍색, 파랑색, 무지개색, 65535컬러에 화면을 뒤덮는 64포인트 폰트로 제목을 써도 상관없다. 자신의 블로그에서 사용하는것도 관계없다. 하지만 그외의 불특정 다수의 글이 올라오는 곳에서는 색깔을 쓰는것이나, 눈에 띄는 특수문자를 사용하지 않는것은 매너다. 지키라고 강요는 하지 않는다.
그런데 자신만 쓰는 게시판에서 글 제목에 별표를 붙이는가? 붙일리가 없다. 모든 게시물의 시작에 별표가 있는 셈인데 취미나 버릇으로 쓴것은 아닐테고, 결국 다른 곳에 게제된다는 사실을 알기 때문에 주목하는 효과를 노리고 쓴것이다. (약간은 근거없는 추측) 주목하는 효과를 노리고 쓴것이 아니면 상관없다. 글 내용이 별표(★)에 대한 것이라면 별표(★)를 제목에 사용하지 않으면, 제목을 잘못지은 것이다.
왜 이것을 지키는 것이 매너인지 이해가 되지 않은 사람이라면, 한번 이것을 생상해보자. 어떤 특정한 뉴스매체에서 어느날 이후부터 자신들의 모든 기사 제목에 별표(★)를 붙인다는 상상을 해보자. 그리고 당신이 네이버 뉴스 페이지를 열었을 때를 생상해보자. :)
fin.
원래 GoldenSectionNotes를 잘써오다가 두어달전에 하드를 날려먹은 후에 다른 것을 써보자 마음을 먹고 지인들에게 물어보고 ATNotes를 추천받았다. 포스트잇 기능도 함께 지원되는녀석이다. 그런데 내 컴퓨터환경에서 가끔 스스로 뻗는 문제점이 있었다. (컴푸터환경: 영문 Windows Server 2003)
스트레스가 쌓이는 손톱긴상태에서 타자치기를 무의식적으로 반복하다가, ATnotes가 또 잘못된 연산을 하는 것을 보고 갑자기 울컥해서 다른 프로그램을 찾았다. 그래서 pricelessware에서 찾은 첫번째 Notes계 프로그램인 KeyNotes를 찾았다. 받고 설치해보니 그럭저럭 쓸만한 모양새였다. ATNotes에 있던 내용들을 모두 복사하고나서 지우고 KeyNotes에 기본적으로 세팅되어 있는 폰트가 마음에 안들어 폰트를 변경하려는 순간.
씨바 -_-
타이틀바에 뜨는 메세지 "프로그램이 응답하지 않습니다.". 곧이어 30초후에 "잘못된 연산입니다." 이단 콤보.
내가 스모커였다면 딱 스모킹 타임.
금방 누가 추천해준, 예전에 써보고 덩치가 무거워서 안쓰기로 결심한 MS OneNotes나 써볼까 -_-
updated:
오랫만에 MS OneNotes를 켜보니, 역시나 초딩들 숙제하라고 만든 프로그램이 분명하다. -_- GoldenSectionNotes 프리웨어를 찾아서 사용하기로 마음먹었다.
대략 5개월전부터 이전하려고 마음을 먹었다. 그 동안 import가 안되어서 (에러메세지도 없이) 지금까지 버텨오다, 얼마전에 에러메세지도 없이 import가 안되는 문제가 단순한 텍스트파일포맷의 문제인걸 알게되었다.
테크니컬한 내용으로는 텍스트파일 포맷은 예전 타자기(TypeWriter)의 잔재로 줄바꿈이라는 현상을 "Carriage Return(hexcode: 0x0D)"과 "Line Feed(0x0A) 으로 표현하였다. 타자기를 기억하시는분이라면 아시겠지만, Carriage Return은 커서를 줄의 맨 처음으로 옮기는 행동이고 Line Feed는 커서를 한줄아래로 내리는 기능이다. 그래서 이 두가지가 정확하게 표현된 콘솔에서는 두가지의 행동이 다르다. 구식 타자기에서 행바꾸는 작업을 기억하신다면, 먼저 (지렛대(?)같은 레버을 잡아 당기면) 커서가 줄의 처음으로 옮겨지고, (레버를 놓으면) 인쇄용지가 한칸위로 올라간다. 그러나 시간은 흐르고 흘러 디지털로된 텍스트파일에서의 줄바꿈이라는 행동에 대해 두가지 행동이 다를 이유가 없어지게 되었다. 이유야 어쨌든간에 그래서 여러 플랫폼에서 줄바꿈(Newline)에 대한 표준이 다르게 되었다. 결론적으로 윈도우즈에서는 CR+LF를 쓰고 UNIX에서는 LF사용하고 MAC에서는 CR만 사용한다.
이러한 이유로 윈도우즈에서 작성된 import파일(CR+LF윈도우즈포맷)을 MT에서 import할때 유닉스포맷으로 가정하고 파일을 읽다가 별 에러 없이 아무것도 import안하고 종료되는 것이다. (사실 이 점은 이상하다. 윈도우즈포맷이라지만, 줄바꿈은 제대로 되고 다만 모든 라인의 끝에 ^M가 붙는것처럼 보이게 되서 별 문제가 없을 것 같음에도 불구하고 MT에서 에러없이 그냥 성공메세지 나오고 종료된다.) 사실 텍스트일의 포맷은 조금만 신경써주면 간단하게 해결할 수 있는 문제임에도 불구하고 해결하기는 커녕 에러메세지나 경고 메세지 하나 띄워주지 않는 것이다. (M프로그래머는 반성하라!)
해결방법은 간단하다. 텍스트포맷 변경을 지원하는 텍스트에디터(ex:Crimson Editor)를 사용하든가, unix상에서 dos2unix를 사용하던가, 아무 에디터에서 정규표현으로 ^M을 전부 삭제해주면 된다.
아무튼, MT3.1에서 블로그 3개까지 생성할수 있었지만 3.2에서는 무한으로 생성가능한 점을 비롯해 상당히 쓸만하고 깔끔해진 것 같다. 테마기능도 지원하고, 포스팅작성도 플러긴으로 간단하게 RichTextEditor로 바꿀수 있다.
아무튼 MT 쵝오!-_-
ps. 구식 타자기에서 줄변경할때 쓰는 그 레버를 뭐라고 하죠? :0
아직 패키지로 나온것은 아니고 msdn 구독자들은 지금 다운로드 가능하다. 예전에는 그때그때 새 버전의 개발툴을 테스트해보곤 했는데 이번은 발매되고 나서 처음으로 깔아보게 생겼다. 현재 내가 사용하는 개발툴이 vc2k3+sql2k인데 개발툴 두가지가 동시에 업그레이드 되는 것 같이 왠지 모르게 뿌듯하다. :)
그나저나 점점 ms는 c++/cli 쪽을 계속 만들고 새로운 기능들을 추가하는것 같다. 무척 궁금하다, C++/CLI 사용하는 사람들이 그렇게 많은가? 개인적인 느낌은 ms가 자기네 세상을 만들려고 사용자들을 C++/CLI로 끌어들이려는 거 같다. 왠지 모르게 짜증나는 느낌-_-; 전에 한번 C++/CLI로 테스트 윈도 클라이언트를 만들려고 해본적이 있는데, C++라이브러리를 사용하려하다가 C++단의 콜백함수문제로 포기한적이 있다.
Bjarne Stroustrup사마는 이것에 대해 어떤 생각을 갖고 계실지 궁금하다. (갈때마다 느끼는 압박은 단연 I designed and implemented the C++ programming language. 라는 문구, 지구에서 단 한명만이 쓸수 있는 말이다. )
추후에 여력이 된다면 간략하게라도, vc2k5에서 추가된 기능들에 대해 써봐야겠다. 어서 빨리 윈도플랫폼에 강력한 경쟁 컴파일러가 등장하기를 기원한다.