반응형

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

 

https://medium.com/@karel.l.vermeiren/cross-architecture-remote-debugging-using-gdb-with-visual-studio-code-vscode-on-linux-c0572794b4ef



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts