gdb - multi process debugging
by St1tchGDB에서는 fork/exec() 이후에도 프로그램을 계속 디버깅 할 수 있는 기능을 제공한다.
(GNU/Linux, HP-UX only)
기본적으로는 fork() 이후에는 parent process 만이 계속 디버깅되며
child에 breakpoint를 설정하면 SIGTRAP을 받고 종료되어 버린다.
이를 해결하기 위한 전통적인 방법은 child에 sleep을 걸고
ps 명령 등으로 child의 pid를 알아낸 후에 attach 하는 방식이 사용되었다.
하지만 Linux (커널 2.5.60 이상) 에서는 다음과 같이 GDB에서 직접 처리할 수 있다.
set follow-fork-mode child
위와 같이 설정하면 fork() 후에 child process를 디버깅 상태로 만들고 parent는 계속 실행시킨다.
follow-fork-mode의 기본값은 parent이며 이는 다음과 같이 확인할 수 있다.
show follow-fork-mode
만약 parent와 child process를 모두 디버깅해야한다면
이들을 모두 제어하기 위해 다음 명령을 이용할 수 있다.
set detach-on-fork off
만약 fork/vfork/exec와 같은 특정 이벤트 발생 시 실행을 중지시키고 싶다면
catchpoint를 설정할 수 있다.
catch exec
아니면 exec()가 수행된 후에도 gdb breakpoint 등은 그대로 남아있게 되므로
공통으로 사용되는 main() 등의 함수에 break를 걸어둘 수도 있다.
출처 : http://egloos.zum.com/studyfoss/v/5120049
블로그의 정보
튜기's blogg(st1tch)
St1tch