gdbserver를 활용한 원격 디버깅
Buildroot를 활용하여 임베디드 시스템을 개발할 때, 원격 디버깅은 매우 중요한 과정입니다. 특히 네트워크를 이용한 원격 디버깅 기법을 사용하면, 직접 디바이스에 접근하지 않고도 오류를 분석하고 수정할 수 있습니다. 이번 포스팅에서는 gdbserver
를 활용한 원격 디버깅 방법을 설명하고, Buildroot 환경에서 gdbserver
를 설정하고 사용하는 방법을 단계별로 안내하겠습니다.
1. gdbserver란?
gdbserver
는 GNU Debugger(GDB)의 원격 디버깅을 지원하는 서버 프로그램입니다. 임베디드 시스템에서 실행되는 애플리케이션을 로컬 개발 환경에서 디버깅할 수 있도록 도와줍니다. gdbserver
는 타겟 디바이스에서 실행되고, 호스트 머신에서 실행 중인 GDB와 네트워크를 통해 통신합니다.
2. Buildroot에서 gdbserver 활성화하기
Buildroot에서 gdbserver
를 사용하려면 해당 패키지를 활성화해야 합니다. 이를 위해 Buildroot의 메뉴 설정에서 다음 단계를 수행합니다.
- Buildroot 설정 메뉴 실행:
make menuconfig
Target packages
→Debugging, profiling and benchmark
메뉴로 이동합니다.gdb
를 선택하고,gdbserver
를 활성화합니다.- 변경 사항을 저장하고 Buildroot를 다시 빌드합니다.
make
위 단계를 완료하면 Buildroot가 gdbserver
를 포함한 파일 시스템 이미지를 생성합니다.
3. 타겟 디바이스에서 gdbserver 실행하기
Buildroot를 통해 gdbserver
가 포함된 파일 시스템을 생성한 후, 이를 타겟 보드에 플래시하고 부팅합니다. 이후 디버깅할 애플리케이션을 준비하고, 다음 명령을 실행하여 gdbserver
를 실행합니다.
./gdbserver :1234 ./my_application
여기서 :1234
는 gdbserver
가 사용할 포트 번호이며, ./my_application
은 디버깅할 실행 파일입니다.
4. 호스트 머신에서 GDB를 실행하여 원격 디버깅하기
이제 호스트 머신에서 GDB를 실행하여 타겟 디바이스에서 실행 중인 애플리케이션을 디버깅할 수 있습니다. 이를 위해 다음 단계를 수행합니다.
디버깅할 애플리케이션을 컴파일할 때 디버깅 심볼을 포함하도록 설정합니다.
gcc -g -o my_application my_application.c
호스트 머신에서 cross GDB를 실행합니다.
arm-linux-gnueabihf-gdb my_application
GDB에서 원격 디바이스에 연결합니다.
(gdb) target remote <타겟 IP>:1234
여기서
<타겟 IP>
는 원격 디바이스의 IP 주소입니다.브레이크포인트를 설정하고 프로그램 실행을 제어합니다.
(gdb) break main (gdb) continue
5. gdbserver를 활용한 디버깅 예제
다음은 간단한 예제 코드입니다. 이 프로그램을 gdbserver
를 통해 원격 디버깅할 수 있습니다.
#include <stdio.h>
void buggy_function() {
int *ptr = NULL;
*ptr = 42; // Segmentation fault 발생
}
int main() {
printf("디버깅 예제 시작\n");
buggy_function();
printf("디버깅 예제 종료\n");
return 0;
}
이 프로그램을 컴파일한 후, gdbserver
를 사용하여 실행하면 segfault가 발생하는 부분을 원격으로 디버깅할 수 있습니다.
6. 추가 디버깅 명령어
원격 디버깅 과정에서 유용하게 사용할 수 있는 몇 가지 GDB 명령어를 소개합니다.
step
(단계별 실행): 한 줄씩 코드를 실행하며 진행 상황을 확인합니다.next
(다음 줄 실행): 함수 내부로 들어가지 않고 다음 줄로 이동합니다.print 변수명
(변수 값 출력): 특정 변수의 값을 확인합니다.info registers
(레지스터 정보 확인): 현재 CPU 레지스터 값을 확인합니다.bt
(백트레이스 확인): 함수 호출 스택을 출력하여 프로그램이 어디에서 충돌했는지 확인합니다.
7. 마무리
이번 포스팅에서는 gdbserver
를 활용한 원격 디버깅 방법을 소개하였습니다. Buildroot 환경에서 gdbserver
를 활성화하고, 타겟 보드에서 실행하는 방법을 설명하였으며, 호스트 머신에서 GDB를 사용하여 디버깅하는 과정까지 다루었습니다. 이를 활용하면 물리적으로 접근이 어려운 임베디드 시스템에서도 효율적으로 디버깅할 수 있습니다.
'Linux > buildroot' 카테고리의 다른 글
Buildroot에서 U-Boot 및 커널 빌드 과정 (0) | 2025.04.24 |
---|---|
Buildroot에서 네트워크 패키지 추가 및 설정 (0) | 2025.04.23 |
SSH, Telnet을 이용한 원격 접속 설정 (0) | 2025.04.21 |
Buildroot 패키지 빌드 및 디버깅 (0) | 2025.04.20 |
새로운 패키지 작성법 (.mk 파일 작성) (0) | 2025.04.19 |