Visual Studio Code에서 GDB를 사용하여 라즈베리파이에 있는 실행파일을 원격 디버깅하는 방법을 다룹니다.
진행을 위해 호스트는 윈도우가 설치된 노트북, 타겟은 라즈베리파이4를 사용했습니다.
2021. 2. 28 최초작성
2023. 9. 28 검토
1. 아래 링크를 참고하여 Visual Studio Code를 설치합니다.
Visual Studio Code 설치하는 방법( Windows / Ubuntu )
https://webnautes.tistory.com/1841
Visual Studio Code에서 C/C++ 프로그래밍하는 방법은 아래 글을 참고하세요.
Windows와 Ubuntu에 설치된 Visual Studio Code를 사용한 C/C++ 개발환경 만들기
https://webnautes.tistory.com/1854
2. 원격 GDB를 사용하기 위해 필요한 작업이 있습니다. 아래 글을 먼저 진행하세요.
GDB를 사용한 원격 디버깅
https://webnautes.tistory.com/1853
3. Visual Studio Code에서 새로운 폴더를 열어서 다음 2개의 파일을 추가합니다.
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 |
4. Visual Studio Code의 메뉴에서 “터미널 > 작업 구성”을 선택합니다.
템플릿에서 tasks.json 파일 만들기를 클릭합니다.
Others를 선택합니다.
탐색기에 tasks.json 파일이 추가됩니다.
tasks.json 파일을 다음 내용으로 대체하고 Ctrl + S를 눌러 저장합니다.
{ "version": "2.0.0", "tasks": [ { "label": "Make: run project's Makefile", "command": "make", "group": "build", "problemMatcher": { "fileLocation": [ "relative", "${workspaceRoot}" ], "pattern": { // The regular expression. //Example to match: helloWorld.c:5:3: warning: implicit declaration of function 'prinft' "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } }, ] } |
5. helloWorld.cpp 파일 내용 이 보이는 상태에서 Ctrl + Shift + B를 누릅니다.
Make: run project’s Makefile을 선택합니다. (안보이고 바로 다음 단계 빌드로 넘어갈 수도 있습니다.)
빌드됩니다.
터미널에 helloWorld 파일이 추가됩니다.
다음과 같은 에러가 난 경우 Makefile에서 들여쓰기 한 부분을 tab 키 입력 한번으로 수정해주세요.
C:\Users\webnautes\test>make
Makefile:5: *** missing separator. Stop.
6. 메뉴에서 “터미널 > 새 터미널”을 선택합니다.
터미널에서 다음 명령으로 실행파일을 타켓으로 복사합니다.
helloWorld는 실행 파일 이름입니다.
192.168.45.74는 타겟의 아이피입니다.
/home/pi 위치에 실행파일이 복사됩니다.
scp.exe helloWorld pi@192.168.45.74:/home/pi
7. 탐색기에서 .vscode 폴더 아래에 launch.json 파일을 생성하고 다음 내용으로 대체하고 Ctrl + S를 눌러 저장합니다.
{ // IntelliSense를 사용하여 가능한 특성에 대해 알아보세요. // 기존 특성에 대한 설명을 보려면 가리킵니다. // 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요. "version": "0.2.0", "configurations": [ { "name": "make - 활성 파일 빌드 및 디버그", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\helloWorld", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\\SysGCC\\raspberry\\bin\\arm-linux-gnueabihf-gdb.exe", "miDebuggerServerAddress": "192.168.45.74:2001", "setupCommands": [ { "description": "gdb에 자동 서식 지정 사용", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "Make: run project's Makefile" } ], } |
program은 디버그할 프로그램 이름입니다.
miDebuggerPath는 호스트에 있는 크로스 디버거 이름입니다.
miDebuggerServerAddress는 타겟의 아이피와 포트로 변경합니다.
8. 퍼미션을 수정한 후, 타겟에서 gdbserver를 실행합니다.
chmod +x helloWorld
gdbserver localhost:2001 helloWorld
9. 호스트의 Visual Studio Code에서 소스 코드 파일이 보이는 상태에서 브레이크 포인트를 추가합니다.
5번째 줄 왼쪽을 마우스 클릭하여 브레이크 포인트를 추가합니다. 빨간원이 추가됩니다.
10. 다시 한번 F5를 누르고 F10을 눌러 한줄씩 실행할 수 있습니다.
타겟에서 확인해보면 3이 출력됩니다.
참고
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 |
GDB를 사용한 원격 디버깅 (0) | 2023.10.05 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!