http://yoonkn.textcube.com/
이전에 적었던 글
http://oldpie.yoonkn.com/cgi-bin/moin.cgi/DebuggingWithEmacs
http://oldpie.yoonkn.com/cgi-bin/moin.cgi/using_GDB
를 새 위키에 적기전에 잠시 정리. emacs 와 gdb 로 디버깅하기 란 페이지에 정리할 생각.
emacs 에서 gdb 를 visual studio 와 유사한 키바인딩으로 사용하기
아래 스샷처럼 여러 윈도 같이 띄우기

내가 원하는 윈도를 따로 프레임으로 띄우기
내 모니터가 작아서 저렇게 놓고 디버깅하긴 좀 불편하다. 자주 쓰는 gdb 콘솔윈도우는 따로 프레임으로 뽑아내서 아래 그림처럼 alt-tab 으로 전환해가면서 사용하는게 더 편하다.

조렇게 쓰려면 위쪽 gdb 창에가서 C-x 5 2 를 누르거나 아니면 GUD 메뉴를 써먹자.
따로 뜬 프레임만 닫을때는 C-x 5 0
간단한 .gdbinit 사용
정말 최소한의 것만 적자면
어떤 타입의 정보를 자주 살펴봐야 할때
gdb 의 print 명령이 꽤나 좋지만 아주 복잡한 구조체가 있고 그중 일부 멤버만 디버깅에 필요하다면 매번 print 하는건 상당히 귀찮다. 아래에 언급한 STL 디버깅 스크립트 처럼 gdbinit 안에 적당한 디버깅용 함수를 만들어서 이걸 이용하는 방법도 있지만 대부분의 경우 가능하면 소스안에 포함하는게 좋다고 본다.( 물론 STL 은 내부구현이 가려져 있으니 소스내에서 뽑는건 오히려 좋지 않겠지, msvc 도 유사한 기능이 있을테니 이런건 디버거 레벨에서 처리하는게 맞을듯) 예를들어 아래 같은 코드가 있으면

디버깅시 int 값이 필요할때마다 gdb 상에서 call dump_int(foo) 를 통해서 값을 출력해볼수 있다.

좀더..
http://oldpie.yoonkn.com/cgi-bin/moin.cgi/DebuggingWithEmacs
http://oldpie.yoonkn.com/cgi-bin/moin.cgi/using_GDB
를 새 위키에 적기전에 잠시 정리. emacs 와 gdb 로 디버깅하기 란 페이지에 정리할 생각.
emacs 에서 gdb 를 visual studio 와 유사한 키바인딩으로 사용하기
(global-set-key [f9] 'gud-break) ; 소스창에서 바로 브레이크포인트 설정흠 recenter-top-bottom 을 매번 불러서 커서를 화면 중앙으로 유지하는 것도 편할거 같은데 아직 시도는 안해봤다. 지금도 그렇게 불편하진 않다..
(global-set-key [f10] 'gud-next) ; 현재 라인 실행하고 다음 라인으로
(global-set-key [f11] 'gud-step) ; 현재 함수안으로 따라 들어간다
(global-set-key [(shift f11)] 'gud-finish) ; 현재 실행중인 함수 리턴후 멈춤
(global-set-key [(shift f10)] '(lambda () ; 현재 커서까지 실행하고 멈춤
(interactive)
(call-interactively 'gud-tbreak)
(call-interactively 'gud-cont)))
아래 스샷처럼 여러 윈도 같이 띄우기
(setq gdb-many-windows t)
내가 원하는 윈도를 따로 프레임으로 띄우기
내 모니터가 작아서 저렇게 놓고 디버깅하긴 좀 불편하다. 자주 쓰는 gdb 콘솔윈도우는 따로 프레임으로 뽑아내서 아래 그림처럼 alt-tab 으로 전환해가면서 사용하는게 더 편하다.
조렇게 쓰려면 위쪽 gdb 창에가서 C-x 5 2 를 누르거나 아니면 GUD 메뉴를 써먹자.
따로 뜬 프레임만 닫을때는 C-x 5 0
간단한 .gdbinit 사용
정말 최소한의 것만 적자면
- pretty print 켜주고,
- emacs 상에서 M-x gdb 로 gdb 띄울때 매번 arg 세팅을 피하기 위해서 set args 해주고
- 몇몇 중요한 함수들 브레이크를 미리 잡아둔다.
set print pretty on
set args -B 200 --frames 5 -o /tmp/output.264 /tmp/foreman_352x288_30fps_449.yuv 352x288
b x264_me_search_ref
어떤 타입의 정보를 자주 살펴봐야 할때
gdb 의 print 명령이 꽤나 좋지만 아주 복잡한 구조체가 있고 그중 일부 멤버만 디버깅에 필요하다면 매번 print 하는건 상당히 귀찮다. 아래에 언급한 STL 디버깅 스크립트 처럼 gdbinit 안에 적당한 디버깅용 함수를 만들어서 이걸 이용하는 방법도 있지만 대부분의 경우 가능하면 소스안에 포함하는게 좋다고 본다.( 물론 STL 은 내부구현이 가려져 있으니 소스내에서 뽑는건 오히려 좋지 않겠지, msvc 도 유사한 기능이 있을테니 이런건 디버거 레벨에서 처리하는게 맞을듯) 예를들어 아래 같은 코드가 있으면
디버깅시 int 값이 필요할때마다 gdb 상에서 call dump_int(foo) 를 통해서 값을 출력해볼수 있다.
좀더..
- 그외 http://oldpie.yoonkn.com/cgi-bin/moin.cgi/using_GDB 에는 적어뒀지만 command 가 상당히 자주 쓰이는 편인데.. 이건 나중에 위키에 올릴때 다시 정리하자.
- 보통 복잡한 구조체더라도 관심있는 멤버는 몇 안되는데.. 적당히 걸러서 보여주는 함수를 만들어 쓰는 경우도 있다. STL 을 풀어서 보여주는 http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views.txt 등이 좋은 예... 아직 써보지는 않았다. STL 내부를 까보면서 까지 디버깅해야 할 상황이라면.. 끔찍하군.
- http://www.yolinux.com/TUTORIALS/GDB-Commands.html 가 깔끔하게 잘 정리된듯. 위 STL 풀어주는 함수정의도 이 링크에서 발견.
http://www.oreillynet.com/onlamp/blog/2008/06/ssh_in_to_microsoft_windows.html?CMP=OTC-6YE827253101&ATT=ssh+in+to+Microsoft+Windows
지금 쓰고있는 윈도머신이 없어서 테스트는 안해봤다. 저글에 소개된 freeSSHd 는 전에 한번 써본것 같은데 기억이 안나네. 다운만 받고 설치를 안했었나?
어쨌거나 이런게 있으니 기억해두자. 위키에 적기 애매한 링크라 여기 적어둔다.
뭐 사실 적어는 두지만 내가 이걸 쓸것 같지는 않다. rdp 가 쓸만하니까..
지금 쓰고있는 윈도머신이 없어서 테스트는 안해봤다. 저글에 소개된 freeSSHd 는 전에 한번 써본것 같은데 기억이 안나네. 다운만 받고 설치를 안했었나?
어쨌거나 이런게 있으니 기억해두자. 위키에 적기 애매한 링크라 여기 적어둔다.
뭐 사실 적어는 두지만 내가 이걸 쓸것 같지는 않다. rdp 가 쓸만하니까..
TAG 링크
http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967
흠 재미나는 방법이구나. 아래 댓들에도 나왔지만 나라면 재미없게 덤프떠서 변수 하나에 바이너리 때려박는 .c 파일을 만들었을텐데 위에서 소개된 방법은 정말 묘하다.
흠 재미나는 방법이구나. 아래 댓들에도 나왔지만 나라면 재미없게 덤프떠서 변수 하나에 바이너리 때려박는 .c 파일을 만들었을텐데 위에서 소개된 방법은 정말 묘하다.
TAG 링크
아 씨바 좃스팟이 로그인이 안되길래 일단 여기 적어둔다.
사무실에서 테스트해본거라 리눅스 환경.
a.cpp 는 워낙 간단하니 적지 않는다.
몇가지 포인트만 적어보면
사무실에서 테스트해본거라 리눅스 환경.
Makefile 소스 보기
a.cpp 는 워낙 간단하니 적지 않는다.
b.cpp 소스 보기
몇가지 포인트만 적어보면
- header 파일을 인클루드 할때 included 아래의 헤더를 가져오면 이놈이 main 을 가지고 있어서 boost_unit_test_framework 를 링크할 필요가 없다. 단 이런짓을 하면 안그래도 느린 빌드속도가 더 느려질테니 불편해도 링크를 해서 쓰자. 이내용은 boost test 문서중에 FAQ 에 들어있다.
- 리눅스 환경에서 처음 빌드했을때 링크에러가 자꾸 났었다. 적당히 소스를 뒤져보니 BOOST_TEST_DYN_LINK 를 디파인해주지 않아서 생긴 문제. 물론 so 버전 말고 .a 를 링크해줘도 해결됐었겠지. 어쨌거나 이부분은 좀 거슬리는데.. 윈도환경에서도 테스트를 해보고 그럴듯하게 빌드시스템(Make, Cmake) 로 뽑아내는 방법을 찾아야겠다.
- 위에서 적은 경우는 BOOST_AUTO_TEST_CASE 를 이용해서 함수를 정의하면서 register 까지 해버린 경우인데 사실 코딩하다 보면 함수 정의와 register 를 따로 해야 하는 경우도 생기겠지... 난 이런식으로 테스트 코드와 릴리즈 코드가 섞이는것을 좋아 하지 않으니 그런 경우는 아예 적지도 않았다. 릴리즈 빌드에 테스트코드 넣는것은 아직 거부감이 든다.
- BOOST_CHECK_BLAHBLAH 류의 매크로가 여러가지 준비되어있다. 이놈들을 test tools 라고 하는데 위 주석에도 적었지만 boost/test/test_tools.hpp 를 참고하자.
- 테스트 스위트 는 BOOST_AUTO_TEST_SUITE 와 BOOST_AUTO_TEST_SUITE_END 매크로로 정의되며 중첩도 가능하다.
- 테스트 스위트를 쓴다면 결국 픽스쳐를 쓴다는 소리. boost test 의 샘플을 가져다가 잘 도는것을 테스트해봤는데 프리프로세서 풀어보고 소스를 읽어보려고 하니 좀 복잡하네.
- 위 예제에서는 스위트 안에 adder 란 클래스와 test_adder_1 이란 픽스쳐를 만들었는데 만약 test_adder_2 라는 픽스쳐를 만들어서 테스트를 하게 되면 adder 가 두번 생성 ( 정확히는 boost test 시스템이 만든 adder 의 서브클래스겠지 ), 이 되서 각각의 fixture 마다 다른 인스턴스를 보게된다. fixture 마다 완전히 독립되었다는것 명심하자. 하나의 인스턴스를 순서대로 이어받는식으로 작성이 가능한지는 모르겠다.
- 위에 적은 내용을 확인하려면 BOOST_TEST_MESSAGE 등의 매크로를 쓰면 된다. 기본값으로는 이걸로 메시지를 뿌려도 안찍히니 boost test 에 parameter 란걸 조정해줘야 하는데 실행파일을 실행할때 --log_level=all 라는 인자를 주거나 BOOST_TEST_LOG_LEVEL=all 란 환경변수를 주거나 하는등의 방법이 있다. 이내용은 boost test 문서중 parameter 를 참고.
http://www.techcrunch.com/2008/05/22/dimp-a-direct-manipulation-video-player/
http://digg.com/programming/Dimp_Lets_You_Move_Objects_in_Flash_Video
http://www.aviz.fr/dimp/download.html
헐 씨발 이거 뭐냐 좀 짱인듯
TAG 링크
좃스팟 그룹의 글을 읽다가 zoho wiki 에 대한 언급이 보여서 잠깐 구경을 해봤는데 위키만 가진게 아니고 오피스급의 서비스를 제공하더라. 다른건 관심없고 위키가 쓸만한지만 약간 살펴봤다. 가입시 구글이나 야후의 인증을 사용할수 있더라. 구글계정을 통해서 가입을 했으니 훗날 다시 로그인할일이 있을때 참고하자.
http://yoonkn.wiki.zoho.com/
위키를 생성하고 한글만으로 새 페이지를 만들어서 적당히 검색을 해봤는데 검색이 안되더라. 인덱싱이 아직 안된건가 해서 영어단어를 몇개 넣고 검색해봤는데 영어단어는 검색이 잘 되는걸 봐서는 한글은 검색이 안되는듯. 더이상 구경할 욕구가 안생긴다.
참고로 현재 구글 좃스팟도 같은 문제를 가지고 있어서 상당히 골치가 아프다. 구글놈들이 하는 서비스인데 검색이 개판이니 이게 무슨 지랄인지. 좃스팟 먹은지가 언젠데 검색엔진 아직 지네거 안붙인건지..
http://sites.google.com/a/yoonkn.com/wiki/
에서 호주이민이란 단어로 검색해보면 호주이민이란 페이지가 있는데도 검색이 안걸린다.
영어가 안되서 구글쪽에 이문제를 보고할수가 없는게 슬프군.
http://yoonkn.wiki.zoho.com/
위키를 생성하고 한글만으로 새 페이지를 만들어서 적당히 검색을 해봤는데 검색이 안되더라. 인덱싱이 아직 안된건가 해서 영어단어를 몇개 넣고 검색해봤는데 영어단어는 검색이 잘 되는걸 봐서는 한글은 검색이 안되는듯. 더이상 구경할 욕구가 안생긴다.
참고로 현재 구글 좃스팟도 같은 문제를 가지고 있어서 상당히 골치가 아프다. 구글놈들이 하는 서비스인데 검색이 개판이니 이게 무슨 지랄인지. 좃스팟 먹은지가 언젠데 검색엔진 아직 지네거 안붙인건지..
http://sites.google.com/a/yoonkn.com/wiki/
에서 호주이민이란 단어로 검색해보면 호주이민이란 페이지가 있는데도 검색이 안걸린다.
영어가 안되서 구글쪽에 이문제를 보고할수가 없는게 슬프군.
TAG 좃스팟
m4650 을 쓰는데 조루배터리라 항상 충전케이블을 물고 있어야 할듯. 집에서 케이블을 꽂아두고 써보니 기기를 꺼둬도 몇분간격마다 액티브싱크가 살아나면서 기기를 켜버리더라. 눈에 거슬리길래 옵션을 뒤져보니 USB 연결허용이란 옵션이 있어 이놈을 꺼보니 액티브싱크가 조용해졌다.
m4650 을 PIM 용도로 쓰고 있지 않고 ebook 용도로만 쓰고 있으니 대부분은 저렇게 꺼두고 ebook 옮길때나 켜서 싱크를 하도록 하자.
TAG m4650
좃스팟에 쓴 글에서 필요한 부분만 발췌
파폭2 에서 내가 쓰던 플러그인들은 구파이위키에 남아있다.
사무실에서 우분투 새버전을 쓰면서 파폭3 를 쓰게되었는데 전에 써오던 플러그인들을 찾아보니 상당수가 버전에 맞지 않고 좀더 검색을 해보니 대세가 바뀐듯 하여 새로 세팅한 플러그인들을 적어둔다.
- Easy DragToGo 지금까지는 super drag and go 을 즐겨 썼는데 이걸로 갈아탔다. 이미지를 새탭에 보여주는 기능이 아주 맘에 들더라.
- FireGestures 마우스 제스쳐 플러그인. 올인원을 써왔는데 이놈으로 갈아탔다. 올인원하고 세팅이 달라서 약간 손을 봐줬다. 드래그투고 의 기능도 일부 포함하더라. 우클릭 드래그로 탭여는것은 익숙하지 않으니 그냥 드래그투고하고 같이 쓰기로 했다. 가장 맘에 들던 기능은 시프트 누른채로 드래그해서 여러 링크를 동시에 열거나 컨트롤 누른채로 드래그로 여러 링크 다운을 쉽게 해주는것.
- Foxmarks 구글 브라우저 싱크를 잘 써왔는데 파폭3 은 지원을 안하더라. 구글 브라우저 싱크 쓰기 전에 쓰던 Foxmarks 로 다시 돌아왔다. 베타버전을 설치하니 파폭3 도 잘 지원해 주더라. 사무실 우분투는 파폭3 집은 아직 파폭2 인데 양쪽 싱크에 문제가 없었다.
- Master Password Timeout 집에서는 혼자 쓰는 PC 라 필요없지만 사무실에는 깔아줘야겠지. 원래 암호관리를 파폭에 안맞기고 매번 PwdHash 로 생성해서 치는 편이었는데 이거 믿고 파폭에 암호 관리자를 쓰기 시작했다.
오동작 하거나 파폭3 을 미지원하는 플러그인들
- Google Notebook 깔긴 깔았는데 좀 오동작을 하네. 하긴 파폭2 에서도 깔끔하게 돌지는 않았었지. scrapbook 은 집에서만 쓰니 깔아보지 않았다.
- Pwdhash 헐 이게 제일 치명적. 그냥 버전 스트링만 바꾸면 깔릴것 같기는 한데 이번에는 파폭의 패스워드 매니저를 쓰고 있으니 굳이 깔필요는 안느껴진다. 처음에만 수작업해주면 될테니...
파폭3이 아직 정식이 아니라 리눅스에서만 사용중이니 참고. 만약 윈도 환경이라면 IE view 등 몇개 플러그인이 추가되야겠지.
TAG Firefox



