달력

52024  이전 다음

  • 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

qgit

Tool/git 2010. 4. 20. 23:55
개발 소스 코드 관리를 주로 git 를 통해 하고 있다.

그리고 관련 GUI Tool로서 git 메뉴얼에서 봤던 gitk를 사용하고 있었다.
그런데 오늘 어쩌다가 ubuntu apt-cache 에서 qgit라는 것을 찾았다.

gitk 에서도 되었는지 모르겠지만,
qgit에서는 git commit들 중에서 특정 파일을 수정한 git commit 만을 보여줄 수도 있고,
특정 문자열을 포함하는 patch가 있는 git commit 들을 검색할 수도 있다.

관련해서 gitg, giggle 등도 설치해 봤는데, qgit가 제일 기능과 UI가 좋은 거 같다.

'Tool > git' 카테고리의 다른 글

git 알면 편한 기능  (0) 2010.11.13
git reference  (0) 2010.07.05
git staic build  (0) 2010.04.27
git init --bare 이용  (1) 2010.04.23
git init --bare 발단  (0) 2010.04.23
Posted by neodelicious
|
<배경>

strace를 사용하고자 했는데, 어쩌다 xtrace가 있더라.
혹시 Xserver와 관련해서 뭔가 trace 하는가 했는데, 예감이 맞았다.


<결론>

결론부터 얘기하면, Xclient와 Xserver 사이의 X11 Protocol 상의 정보를 훔쳐볼 수 있다.

즉, Xlib을 사용하는 Xclient 프로그램 혹은 Xlib를 backend로 사용하는 GTK 프로그램 등의 프로그램의 소스를 보지 않아도 내부적으로 사용하는 Xlib API의 이름을 알 수 있다.

또한 해당 API를 통해 Xserver 와 주고받는 정보도 볼 수 있는데 어느 정도까지 제공해주는지는 확인해봐야 할 것 같다. 기본 Xlib API는 되는듯 한데, 다른 X extension상의  API는 대부분 어느 API인지 그 이름조차 안 나오는 것 같다. 그래도 특정 Xclient에서 어떤 Xlib API를 사용하는지 살펴보는 용도로는 사용할 수 있을 것 같다.

그밖에 옵션을 통해 시각을 출력할 수 있는데, 이를 통해 특정 Xclient 프로그램의 Xserver 이용 비중을 측정한다거나, 특정 Xlib API에 대한 이용 비중을 측정하는 것은 좀 무리가 있어 보인다.

정확하게 하려면 역시 Xserver 내에 logging 소스를 추가하고 이를 분석하는 게 정확할 것 같다.


<추가 사항>
  1. 다양한 옵션을 제공하는데, 이중 일부를 소개한다.
  2. -D [name] : 가상으로 사용할 display 값으로,  '-D :9' 처럼 쓰면 되고 기본 적으로 :9 로 되어 있다.
  3. -d [name] : 기본 Xserver의 display 값으로 안 쓰면 기본값을 사용한다.
  4. -k : 더 이상 Xclient 가 없어도 xtrace를 종료하지 않는다.
  5. -i : Xclient가 Xserver에 보내는 매 request를 보낼지 선택할 수 있다.
  6. -o [filename] : stdout 대신에 특정 파일에 출력한다.
  7. --timestamps : 매 정보에 대한 시각을 출력한다.
  8. --relative-timestamps : 매 정보에 대한 시각을 출력하되, 첫 연결을 기준으로 상대적 시각을 출력한다.

<참고 사항>

opensource 로 소스를 받을 수 있고,
ubuntu에서는 apt-get install xtrace 로 설치할 수 있다.
http://xtrace.alioth.debian.org/ 를 참고해서 자세한 정보를 얻을 수 있는데, 설치 후 man xtrace 로 옵션에 대한 정보를 볼 수 있다.


<추력 정보 설명>

아래  <사용 예>에서 방법을 보도록 하고, 바로 아래 xtrace 의 출력 결과 예를 살펴 보자.

0.  1 000:<:0001: 20: Request(98): QueryExtension  name='BIG-REQUESTS'
0.  1 000:>:0001:32: Reply to QueryExtension: present=true(0x01) major-opcode=142 first-event=0 first-error=0


좌측 순으로 시각, 방향(<는 Xserver로, > Xclient로), data size(?) 이고, 그 이후는 해당 정보이다.
X11 protocol에는 Xclient가 보내는 request와 Xserver가 보내는 reply, error, event 가 있는데 이에 대한 정보를 보여준다. 특히 request는 어떤 request 인지 major, minor 번호와 해당 API 이름와 정보를 출력한다.

아래는 xtrace 참고 웹 페이지에서 가져온 것으로,
xtrace에서 keyboard extension에 대한 정보를 갖고 있지 않아서 152번 Major에 대한 request가 무엇인지 알 수 없어 'unknown'으로 보여주고 있다.

000:>:0x0004:32: Reply to BigReqEnable: maximum-request-length=1048575
000:<:0005: 20: Request(98): QueryExtension name='XKEYBOARD'
000:>:0x0005:32: Reply to QueryExtension: present=true(0x01) major-opcode=152 first-event=111 first-error=178
000:<:0006: 8: Request(152): unknown


<사용 예>

$ xtrace --relative-timestamps &
No display name to create specified, trying :9
$ DISPLAY=:9 xdpyinfo
Got connection from unknown(local)
0.  0 000:<: am lsb-first want 11:0 authorising with 'MIT-MAGIC-COOKIE-1' of length 16
0.  1 000:>: Success, version is 11:0-52704.
0.  1 000:<:0001: 20: Request(98): QueryExtension  name='BIG-REQUESTS'
0.  1 000:>:0001:32: Reply to QueryExtension: present=true(0x01) major-opcode=142 first-event=0 first-error=0
0.  1 000:<:0002:  4: BIG-REQUESTS-Request(142,0): BigReqEnable
0.  2 000:>:0002:32: Reply to BigReqEnable: maximum-request-length=4194303
0.  2 000:<:0003: 20: Request(55): CreateGC cid=0x04a00000 drawable=0x000000fa  values={background=0x00ffffff}
0.  2 000:<:0004: 24: Request(20): GetProperty delete=false(0x00) window=0x000000fa property=0x17("RESOURCE_MANAGER") type=0x1f("STRING") long-offset=0x00000000 long-length=0x05f5e100
0.  2 000:>:0004:208: Reply to GetProperty:  type=0x1f("STRING") bytes-after=0x00000000   data='Xcursor.size:\t18\nXcursor.theme:\tHuman\nXcursor.theme_core:\ttrue\nXft.antialias:\t1\nXft.dpi:\t96\nXft.hinting:\t1\nXft.hintstyle:\thintslight\nXft.lcdfilter:\tlcddefault\nXft.rgba:\trgb\n'
0.  2 000:<:0005: 20: Request(98): QueryExtension  name='XKEYBOARD'
0.  3 000:>:0005:32: Reply to QueryExtension: present=true(0x01) major-opcode=144 first-event=96 first-error=153
0.  3 000:<:0006:  8: XKEYBOARD-Request(144,0): UseExtension major=1 minor=0
0.  3 000:>:0006:32: Reply to UseExtension: major=1 minor=0
0.  4 000:<:0007:  4: Request(43): GetInputFocus
0.  4 000:>:0007:32: Reply to GetInputFocus: revert-to=Parent(0x02) focus=0x04600005
0.  4 000:<:0008:  4: Request(99): ListExtensions
0.  4 000:>:0008:300: Reply to ListExtensions: number of STRs in names=0x1b names={ s='MIT-SCREEN-SAVER'},{ s='XFree86-VidModeExtension'},{ s='XFree86-DGA'},{ s='DPMS'},{ s='XVideo'},{ s='X-Resource'},{ s='DOUBLE-BUFFER'},{ s='RECORD'},{ s='DRI2'},{ s='Generic Event Extension'},{ s='SHAPE'},{ s='MIT-SHM'},{ s='XInputExtension'},{ s='XTEST'},{ s='BIG-REQUESTS'},{ s='SYNC'},{ s='XKEYBOARD'},{ s='XC-MISC'},{ s='SECURITY'},{ s='XFIXES'},{ s='RENDER'},{ s='RANDR'},{ s='XINERAMA'},{ s='Composite'},{ s='DAMAGE'},{ s='GLX'},{ s='SGI-GLX'},{ s=''},{ s=''};
0.  6 000:<:0009: 12: Request(97): QueryBestSize class=Cursor(0x00) drawable=0x000000fa width=65535 height=65535
0.  6 000:>:0009:32: Reply to QueryBestSize: width=64 height=64
0. 59 000:<:000a:  8: Request(60): FreeGC gc=0x04a00000
0. 59 000:<:000b:  4: Request(43): GetInputFocus
0. 59 000:>:000b:32: Reply to GetInputFocus: revert-to=Parent(0x02) focus=0x04600005

Posted by neodelicious
|

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

vim에서 tab 길이 조정 (i.e. : 기본 8에서 4로 조정할 때)

1) 명령 모드
  : set tabstop=4

2) UNIX 상에서
  홈디렉토리에 .exrc 또는 .vimrc 에 set tabstop=4 를 한줄 넣어 줍니다.

'Tool > editor & source viewer' 카테고리의 다른 글

cscope  (0) 2011.05.23
Source Explorer - Vim 에서 Source Insight 따라잡기  (0) 2011.03.01
vim 이용하기 (내가 필요한 것만...)  (0) 2011.03.01
Posted by neodelicious
|

1. 재귀적 make 사용


1.1. 주요 설명

다음과 같이 특정 폴더(show)로 이동하여 해당 폴더의 make를 실행할 수도 있지만,
cd show && make
다음과 같이 쉘 스크립트를 이용하여 간단히 할 수 있다.
@for dir in $(DIRS); do make -C $$dir || exit $? ; done
참고적으로 다음과 같이 export 키워드를 통해 상위 Makefile에서 특정 매크로값을 서브 Makefile에 전달할 수 있다.
export CC == gcc

구조를 간단히 설명하면,
최상위 Makefile에서는 서브 Makefile을 실행하면,
각 서브 Makefile은 컴파일하여 목적파일(.o)을 상위 폴더에 복사한다.
그러면 최상위 Makefile이 이러한 목적파일(.o)을 이용하여 최종 hello 바이너리 파일을 만든다.


1.2. 테스트 환경 설명

이후의 Makefile을 이용하기 위해서
show.c 파일이 있는 show 폴더와 main.c 파일이 있는 main 폴더를 만들었다.
해당 소스 코드는 생략하며, 아래와 같은 최상위 Makefile을 실행하면 hello 라는 바이너리 파일이 생성된다.


1.3. 최상위 Makefile

DIRS = show main
OBJECTS = show.o main.o
TARGET = hello

all : objs
$(CC) -o $(TARGET) $(OBJECTS)

objs:
@for dir in $(DIRS); do \
make -C $$dir || exit $?; \
done


1.4. 각 하위 폴더의 Makefile

OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))

all : $(OBJECTS)
cp -f $^ ../

clean:
-rm -rf *.o

clean:
@for dir in $(DIRS); do \
make -C $$dir clean; \
done
-rm -rf *.o $(TARGET)

'Tool > build' 카테고리의 다른 글

CMake 를 써 보자  (0) 2010.05.08
Make 이용법 (함수 및 특수 타겟)  (0) 2007.12.31
Posted by neodelicious
|