Computer/LINUX

디버깅 툴

알찬돌삐 2012. 8. 10. 16:13

 참조 URL : http://kldp.org/node/900

디버깅의 시작은 과감히 툴을 먼저 배우는 것이라고 해도 과언이 아닐정도로 툴에
익숙해야합니다. 디버깅 툴은 어떻게 보면, 크게 구분이 되어 있는 것은 아니지만
사뭇 심도있는 분석을 위해서는 해킹에 사용되는 것과 크게 다르지 않습니다.
디버깅과 해킹은 같은 맥락에 있는 것이지요.

먼저 쉽고 재밌게 접근할 수 있는 것이 system call tracer입니다.

linux: strace
solaris: truss
hpux: trace(10.x), tusc(11.x)

로 알려져 있는 것들이지요. 위 프로그램들의 option 들이 대개 비슷합니다.

strace ls

만 해도 나오는 내용이 어떻다는 것을 보실 수 있을텐데요.
이들은 모두 kernel level의 함수들입니다. 즉 system call이라는 것이지요.

직관적으로 이용할 수 있는 방법은 다음과 같은 것들입니다.

1. 어떤 shared library가 사용되는지 알수 있음.
2. 1번과 비슷하지만 어떤 파일을 열다가 실패하는지,
대개 configuration file을 global, home.. 순으로 찾지요.
3. process가 잠시 멈출때, 어떤것을 대기하고 있는지.
4. 전송되고 들어오는 내용은 무엇인지 (-s 1024 option)
5. 어떤 signal을 받는지.
6. ipc 객체들은 어떤것들이 이용되는지.

등등...

system call은 기본적으로 OS를 다루는 방법에 대한 것이므로, 많은 hint를 얻을 수
있습니다.

option 들중에 중요한 것 몇가지만 소개하자면, system call의 가장 대표적인 것중의
하나는 실행되고 있는 daemon의 현재 작업내용을 살펴볼수 있는 것이 있습니다.

strace -p <pid>

형태로 실행중인 process를 살펴보는 것이지요. 더불어 daemon의 경우 fork가
일어나는 경우가 많은데,

strace -f -p <pid>

-f option을 주어 fork되어 나오는 process까지 trace 하라는 것입니다. fork외에
vfork도 추적할 수 있어야하므로 대개 f를 쓸때는 다음과 같이 사용합니다.

strace -fF -p <pid>

더 줄여서

strace -fFp <pid>

로 사용하지요.

이것들을 종합하여 다음과 같은 용도로 사용할 수 있습니다.

1. daemon 이 갑자기 멈추었는데, debug 용 printf를 집어 넣지 않았을 때, 알고싶은
경우.
2. socket server가 과연 process가 connection을 접수한 뒤 제대로 fork 되는지.
3. telnet 서버에 접속하였는데, prompt가 떨어지지 않는 경우 inetd가 무슨일을
하는지. (대개 tcp_wrapper에 의해 DNS IP resolve 하는 경우가 많죠.)

지금까지 한 것은 일부분에 지나지 않습니다. 남의 program을 추적할때 system call
trace를 하는 것만으로 process가 하는 일을 상상할 수 있다면, 프로그램을
만든사람은 어느 code를 지나가고 있는지 알 수 있을 것입니다.

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > LINUX' 카테고리의 다른 글

삼바 서버 설정  (0) 2012.08.10
분할 압축  (0) 2012.08.10
vi tip  (0) 2012.08.10
UCC 를 위한 ffmpeg 설치  (0) 2012.08.10
Text Processing  (0) 2012.08.10