GDB를 사용할 때 프로그램이 여러 파일로 나누어져 있더라도, 기본적인 디버깅 방법은 동일합니다. 다만, 몇 가지 추가적인 명령어와 전략을 사용하면 멀티파일 프로젝트에서의 디버깅이 더 편리해집니다.
여러 파일로 나누어진 프로젝트를 디버깅하려면, 각 소스 파일을 디버깅 정보(-g
옵션 포함)와 함께 컴파일해야 합니다. 예를 들어, 두 개의 소스 파일 main.c
와 utils.c
가 있을 때, 이를 다음과 같이 컴파일할 수 있습니다:
gcc -g -o my_program main.c utils.c
이렇게 하면 GDB가 각각의 소스 파일과 변수 정보를 인식할 수 있습니다.
GDB에서 특정 파일의 특정 라인이나 함수에 중단점을 설정할 수 있습니다. 이를 위해 파일 이름과 라인 번호 또는 함수 이름을 함께 지정합니다.
특정 파일의 라인에 중단점 설정:
break main.c:42
위 명령어는 main.c
파일의 42번째 줄에 중단점을 설정합니다.
특정 파일의 함수에 중단점 설정:
break utils.c:function_name
이는 utils.c
파일의 function_name
함수에 중단점을 설정합니다.
GDB에서 소스 파일을 탐색할 때 list
명령어를 사용하여 다른 파일의 코드를 볼 수 있습니다.
특정 파일의 특정 줄 주변 코드 보기:
list main.c:10
위 명령어는 main.c
파일의 10번째 줄 주변의 코드를 보여줍니다.
특정 함수 주변의 코드 보기:
list utils.c:function_name
이는 utils.c
파일의 function_name
함수 주변의 코드를 보여줍니다.
디버깅 중에 현재 디버깅하고 있는 파일과 위치를 확인하고 다른 파일로 이동할 수 있습니다.
현재 위치의 파일과 줄 번호 확인:
info source
다른 파일로 이동하여 코드 확인:
list source.c:25
이는 source.c
파일의 25번째 줄을 중심으로 코드를 보여줍니다.
여러 파일에 걸쳐 있는 함수 호출 스택을 추적할 때 backtrace
명령어를 사용합니다. 각 호출 스택 프레임은 파일 이름과 줄 번호를 포함하여 표시되므로, 여러 파일에 걸친 호출 관계를 쉽게 파악할 수 있습니다.
backtrace