본문 바로가기
CS

리눅스 개발하면서 C++ 디버깅 방법 - gdb breakpoint(중단점) 활용

by Warehaus 2024. 3. 4.

출처: unsplash - Clément Hélardot

 

 

 

윈도에서 visual studio를 이용하거나 이클립스로 개발을 했을 때 디버깅에 대한 고민은 크게 하지 않았던 것 같습니다.

IDE가 강력한 기능을 제공하고 있고, 편의성이 상당했기 때문입니다.

 

하지만 리눅스에서 개발을 하는 경우라면 어떨까요?

 

DISPLAY를 잡고 IDE를 통해 개발한다면 윈도우와 큰 차이는 없을지도 모르겠습니다.

아니면 IDE에 ssh 설정을 해서 개발을 하는것도 방법이겠죠.

 

반응형

 

GDB

저는 리눅스에서 vim을 이용하여 개발을 하고 있습니다.

디버깅은 gdb를 주로 사용하고요.

 

너무 old fashion 인가 싶지만.. 다양한  업계가 있고 제한적인 개발환경이 있으니 너무 뭐라 하지 않으셨으면 좋겠습니다.

 

여하튼 다른 개발 도구를 쓰더라도 디버깅 만큼은 gdb를 사용하게 될 것 같습니다.

 

오늘은 gdb로 어떻게 breakpoint 를 걸어서 함수들을 디버깅할 수 있는지 알아보겠습니다.

 

gdb에 대한 내용은 이전 포스팅을 참고하셔도 좋습니다.

 

 

gdb 기초 사용방법 - 리눅스에서 C++ 디버깅 실행부터 값 출력까지

gdb란? GDB는 GNU project의 디버거로, 실행되는 상황 또는 충돌이 발생한 프로그램에서 일어난 일들을 볼 수 있도록 한다. GDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it

armin.tistory.com

 

 

Linux 에서 프로세스의 core file(core dump) 분석

리눅스 환경에서 프로그래밍을 하고 서비스를 운영하다 보니 프로세스가 제대로 동작하지 않는 경우가 종종 발생합니다. 이런 경우, 제가 주로 선택하는 방식은 2가지 입니다. 1. gdb 를 프로세스

armin.tistory.com

 


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에서 어떻게 진행되는지 다음 포스팅에서 예시로 찾아뵙겠습니다.

 

 

읽어주셔서 감사합니다.