GDB를 사용하여 원격 디버깅하는 방법을 다룹니다.
진행을 위해 호스트는 윈도우가 설치된 노트북, 타겟은 라즈베리파이3를 사용했습니다.
2021. 2. 28 최초작성
2023. 9. 27 검토
GDB는 대부분의 Linux 시스템에 사용되는 텍스트 기반의 디버거입니다.
리모트 디버깅을 하려면 타겟에는 gdbserver를 실행하고 호스트에는 크로스 디버거 gdb를 실행해야 합니다.
0. 호스트에 크로스 GDB를 설치해야 합니다.
아래 링크에서 raspberry-gcc10.2.1-r2.exe 를 다운로드하여 설치합니다.
설치되는 디폴트 경로는 C:\SysGCC\raspberry입니다.
https://gnutoolchains.com/raspberry/
C:\SysGCC\raspberry\bin 경로에 필요한 gdb가 arm-linux-gnueabihf-gdb.exe라는 이름으로 있습니다.
리눅스라면 다음처럼 크로스 GDB를 설치합니다. 이 경우 실행파일 이름이 gdb-multiarch입니다.
$ sudo apt install gdb-multiarch
본 글에서는 호스트가 윈도우라고 가정하고 진행합니다.
1. 다음 파일들을 윈도우에서 작성해야 합니다.
편의상 명령 프롬프트가 실행되는 위치인 C:\Users\사용자 이름에 test 폴더를 생성하여 진행합니다.
test 폴더를 생성하고 해당 폴더로 이동합니다.
다음처럼 명령 프롬프트에서 메모장을 실행하여 원하는 파일을 생성할 수 있습니다.
메모장을 사용한 경우 Makefile은 다음처럼 이름을 바꾸어줘야 합니다.
작성해야하는 두 개의 파일입니다.
helloWorld.cpp
#include <iostream> int main() { int a = 1; int b = 2; int c = a + b; std::cout << c << std::endl; } |
Makefile
Makefile의 CFLAGS 옵션에 -g 옵션을 추가해야 합니다.
CC=arm-linux-gnueabihf-g++.exe CFLAGS=-g all: helloWorld.cpp $(CC) helloWorld.cpp $(CFLAGS) -o helloWorld clean: rm -f helloWorld |
다음 명령으로 컴파일합니다.
다음처럼 helloWorld 파일이 생성됩니다.
다음과 같은 에러가 난 경우 Makefile에서 들여쓰기 한 부분을 빈칸 4개로수정해주세요.
C:\Users\webnautes\test>make
Makefile:5: *** missing separator. Stop.
2. 라즈베리파이에 SSH 접속해둡니다.
윈도우에서 진행한다면 MobaXterm을 사용하는 것을 권장합니다.
3. 윈도우에서 scp를 사용하여 프로그램을 타겟에 복사합니다. 192.168.45.74는 라즈베리파이의 IP 주소로 변경하세요.
scp helloWorld pi@192.168.45.74:/home/pi
4. 라즈베리파이와 연결된 ssh 터미널에서 프로그램을 실행시켜봅니다.
실행하기 위해 퍼미션을 추가해주는 것이 필요합니다.
5. 타겟에 gdbserver를 설치합니다.
$ sudo apt-get install gdbserver
6. gdbserver를 다음처럼 실행합니다.
포트번호 2001는 바꿀 수 있습니다.
여기에선 프로그램 이름이 helloWorld라고 가정합니다.
문제없다면 pid와 Listening port가 출력됩니다.
$ gdbserver localhost:2001 helloWorld
7. 호스트에서 helloWorld 프로그램이 있는 위치에서 다음처럼 크로스 디버거를 실행합니다.
윈도우라면
arm-linux-gnueabihf-gdb helloWorld
리눅스라면
$ gdb-multiarch helloWorld
8. 호스트의 GDB 프롬프트 "(gdb)"에서 다음 명령을 사용하여 타겟에 접속합니다.
IP 주소는 타겟의 주소로 변경하세요.
포트 번호는 gdbserver 실행시 지정한 것과 같아야 합니다.
(gdb) target remote 192.168.45.74:2001
9. 타겟에 다음 메시지가 출력됩니다.
Remote debugging from host ~~~~~
10. 호스트인 윈도우에서 디버깅을 해봅니다.
타겟에 출력된 메시지입니다. 3이 출력되어 있는 것을 볼 수 있습니다.
좀 더 편하게 디버깅을 하시려면 아래 포스트를 참고하세요.
Visual Studio Code에서 GDB 원격 디버깅하는 방법
https://webnautes.tistory.com/1855
참고
https://opencoursehub.cs.sfu.ca/bfraser/grav-cms/cmpt433/guides/files/DebuggingGuide.pdf
'개발 환경 > C&C++ 개발환경' 카테고리의 다른 글
Visual Studio Code를 사용한 C/C++ 개발환경 만들기-(Windows/Ubuntu) (37) | 2024.10.06 |
---|---|
Visual Studio Code에서 C/C++ 프로그래밍 with Makefile ( Windows/Ubuntu) (0) | 2024.04.06 |
Visual Studio Code에서 CMake를 사용한 C/C++ 프로젝트 생성하기 (0) | 2024.04.06 |
Visual Studio Code에서 GDB 원격 디버깅하는 방법 (0) | 2023.10.05 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!