윈도에서 visual studio를 이용하거나 이클립스로 개발을 했을 때 디버깅에 대한 고민은 크게 하지 않았던 것 같습니다.
IDE가 강력한 기능을 제공하고 있고, 편의성이 상당했기 때문입니다.
하지만 리눅스에서 개발을 하는 경우라면 어떨까요?
DISPLAY를 잡고 IDE를 통해 개발한다면 윈도우와 큰 차이는 없을지도 모르겠습니다.
아니면 IDE에 ssh 설정을 해서 개발을 하는것도 방법이겠죠.
GDB
저는 리눅스에서 vim을 이용하여 개발을 하고 있습니다.
디버깅은 gdb를 주로 사용하고요.
너무 old fashion 인가 싶지만.. 다양한 업계가 있고 제한적인 개발환경이 있으니 너무 뭐라 하지 않으셨으면 좋겠습니다.
여하튼 다른 개발 도구를 쓰더라도 디버깅 만큼은 gdb를 사용하게 될 것 같습니다.
오늘은 gdb로 어떻게 breakpoint 를 걸어서 함수들을 디버깅할 수 있는지 알아보겠습니다.
gdb에 대한 내용은 이전 포스팅을 참고하셔도 좋습니다.
breakpoint
breakpoint 는 의도적으로 프로그램을 중단시킬 지점을 의미합니다.
한글로는 중단점 이라는 표현도 많이들 사용합니다.
코드를 작성하고 나서 이 코드가 잘 동작하는지 보기 위해서 gdb를 실행하고
제대로 돌지 않는 것 같은 부분에 breakpoint 를 잡아 실행흐름을 확인해 볼 수 있습니다.
breakpoint를 잡고 확인하기 위한 gdb 명령어는 다음과 같습니다.
아래 내용은 정말 자주사용하는 명령어 위주로 정리해 두었으니 꼭 알아두시는 게 좋습니다.
break function
함수명을 breakpoint로 설정합니다. function 이름에 해당하는 함수가 호출될 때 프로그램을 중단합니다.
break linenum
디버깅하는 소스파일의 특정 라인에서 프로그램을 멈춥니다. 어떤 코드를 실행하건 해당 코드의 linenum에서 중단됩니다.
break filename:linenum
특정 파일의 linenum에서 코드를 중단합니다.
여러개의 파일이 함께 빌드되어 동작하는 프로그램에서 활용합니다.
break filename:function
특정 파일의 함수명(function)에서 멈춥니다.
break... if cond
특정 조건이 되었을 때를 breakpoint로 설정합니다.
코드라인을 breakpoint 로 설정하는 경우 원하는 값이 나올 때까지 코드를 계속 돌려야 하는 불편함이 있습니다.
이런 경우 조건문을 breakpoint로 많이 사용합니다.
info breakpoints
설정한 breakpoint 리스트를 보여줍니다.
실제로 코드를 실행하기 전에 breakpoint가 잘 설정되어 있는지 확인할때 주로 사용합니다.
이제 breakpoint를 설정하였으니 실제 코드를 실행하면서 어떻게 동작하는지 확인해 볼 차례입니다.
function 실행은 continue, step, next, fg 등의 명령어를 사용합니다.
이런 명령어들은 예시를 보는게 이해하시기 편한데요,
Breakpoint와 코드 디버깅이 gdb에서 어떻게 진행되는지 다음 포스팅에서 예시로 찾아뵙겠습니다.
읽어주셔서 감사합니다.
'CS' 카테고리의 다른 글
MSA에서 서비스 간 효과적인 통신을 책임지는 Service mesh 개념 읽어보기 (0) | 2024.03.16 |
---|---|
Standard stream의 유형 stdout, stderr 차이점과 활용 (0) | 2024.03.05 |
[C++] gdb이용하여 thread 분석하기 (0) | 2024.03.02 |
[makefile 활용] makefile로 코드빌드 하기 (1) | 2024.02.26 |
비전공자를 위한 프로그래밍 개념 - 프로세스와 스레드 (0) | 2024.02.24 |