본문 바로가기

반응형

gdb

(4)
gdb - 실행 중인 프로세스 & 스레드 디버깅 하기 개발을 하다 보면 딱히 프로세스가 죽는 것은 아닌데 과도하게 cpu를 먹는 다던지(특정 스레드 무한루프), 프로세스가 살아는 있지만 아무런 응답을 하지 않는다던지(데드락)하는 경우가 있다. 이런 경우 실행 중인 프로세스에 직접 붙어 현재 상태를 체크 해 볼수 있다면 문제 해결에 많은 도움이 될수 있다. 이번 포스팅에서는 실행 중인 프로세스에 gdb 디버거를 붙이고 각 스레드의 상태를 확인, 문제가 되는 스레드의 스택을 트레이싱하는 방법에 대해 알아 보도록 하겠다. 스레드 상태 확인하기 $ ps -eLf | grep UID PID PPID LWP C NLWP STIME TTY TIME CMD kukuta 11048 1 11048 0 8 10:52 pts/0 00:00:00 kukuta 11048 1 110..
Ubuntu core dump 셋팅 limits.conf 파일 수정 $ sudo vi /etc/security/limits.conf /etc/security/limits.conf 파일에 아래 두 줄을 추가 kukuta soft core unlimited kukuta hard core unlimited 위에서 kukuta는 계정명이다. 각자가 사용하는 계정을 적어 주면 된다. 위와 같이하면 프로세스가 예기치 않게 죽을시 코어 덤프를 남기고 죽게 된다. 코어 덤프 pattern 수정 /etc/sysctl.conf 파일에 아래 내용을 등록해 준다. kernel.core_pattern = core.%e.%p.%t 처음은 단순 core라고만 적혀 있다. 아래를 참고하여 각자가 원하는 형태로 바꾸도록 한다. %p: pid %: '%' is dropp..
gdb - breakpoint [breakpoint 설정](gdb) break 현재줄 breakpoint 설정(gdb) break 22 22라인에 breakpoint 설정(gdb) break func_name func라는 이름의 함수에 breakpoint 설정(gdb) break class_name::func_name class_name 이라는 클래스 func_name 멤버 함수에 breakpoint 설정(gdb) break main.cpp:main main.cpp 파일의 main 함수에 breakpoint 설정(gdb) break main.cpp:10 main.cpp 파일의 10번째 라인에 breakpoint 설정 [regular expression breakpoint 설정](gdb) rbreak fu* fu*를 만족하는 모든 함수..
GDB Tutorial GDB Tutorial 디버거는 다른 프로그램을 라인 단위 또는 변수 단위로 실행 시키면서 메모리에서 일어나고 있는 일을들 확인 할 수 있는 프로그램이다. 그 중 가장 유명한 디버거로는 UNIX의 GDB가 있다. 다음의 링크에는 GDB에 관한 보다 자세한 온라인 문서가 있다(documentation for GDB online), 또는 man 페이지에서 보다 빨리 GDB에 대한 정보를 얻을 수 있을 것이다. Starting GDB GDB를 사용하기 위해서는 컴파일 시에 -g 플래그를 사용하여야 한다. $ gcc -g trees.c ※ c++ 사용자라면 g++ -g trees.cpp 라고 해도 된다. 위와 같은 작업 후엔 a.out 이라는 실행 가능 파일이 생성 된다(만일 -o 플래그로 다른 이름을 줄 수도..

반응형