728x90

수성비전자방입니다. 오랜만에 Visual Studio Code에서 C프로그래밍 하는 것에 관한 글을 쓰겠습니다. C언어 디버깅을 하려면 어떡해야 할까요? gdb 디버거를 쓰시면 됩니다.^^

 

오늘 글을 시작하기 전에...

1. Visual Studio Code를 설치하시기 바랍니다. 오늘 다룰 내용은 VScode의 기능은 아니고 gdb 디버거의 기능이지만, 이 글의 시리즈가 Visual Studio Code 시리즈이므로 Visual Studio Code 기준으로 글을 작성하겠습니다.

https://toopyo.tistory.com/entry/vscode-post1

위 글을 보시면 Visual Studio Code를 설치하는 방법과 한국어 패치하는 방법을 확인하실 수 있습니다.

2. GCC를 설치하셔야 합니다. Windows PC라면 MinGW-w64를 설치하시면 됩니다.

https://toopyo.tistory.com/entry/vscode-post2

위 글을 참고하여 C/C++ 확장과 MinGW-w64를 설치하시고, C언어 빌드 옵션을 숙지하시기 바랍니다.

 

gdb 디버거를 사용하는 방법

1. C언어로 프로그래밍합니다. 저는 여러분들께 디버깅을 설명드리기 위해 위 스크린샷과 같이 간단하게 코드를 짜 보았습니다.

2. C code를 빌드합니다. 이때 -g 옵션을 꼭 추가하셔야 합니다. 디버깅을 위해 추가해야 할 옵션입니다.

예를 들어, 저는 gcc -g dtest.c -o appdt 명령을 실행했습니다.

(-o appdt는 실행파일명을 appdt로 지정한 것으로, PowerShell 자동완성 기능을 편하게 이용하기 위해 사용했습니다. 필수사항은 아닙니다.)

 

3. 빌드가 완료되면 exe 파일이 생성되었을 것입니다. 잘 생성되었는지 확인하시기 바랍니다.(실행파일명도 확인!)

4. 소스 코드와 실행 파일이 같은 폴더 안에 있어야 합니다.

5. gdb 실행파일명.exe 또는 gdb .\실행파일명.exe 명령을 실행합니다.

(Tip: 실행파일명의 일부만 치고 Tap 키를 누르면 .\실행파일명.exe로 자동완성됩니다.)

 

6. Type <return> to continue, or q <return> to quit

뜻: 계속하려면 엔터 키를 누르시고, 종료하려면 q를 입력하신 후 엔터 치세요.

 

이제 gdb 디버거가 실행되었습니다. 명령어를 입력하며 사용해야 하는데, 쓸만한 명령어들을 정리해 보겠습니다.

 

run

우선 가볍게 run부터 사용해 보겠습니다.

run을 입력하시고 엔터 치시면 프로그램이 실행됩니다.

지금은 딱히 설정한 것이 없어서 프로그램이 전부 실행되지만, breakpoint 설정을 하고 나서 다시 run을 해 보시면 breakpoint마다 쉬게 됩니다.(breakpoint에 대해서는 뒤에서 다룸.)

 

list

list는 소스코드를 볼 수 있는 명령어입니다.

*명령어: list

*기능: 소스코드 출력

 

list를 입력하시고 엔터 치시면 소스 코드의 Line 1부터 Line 10까지 출력됩니다. VScode로 작성한 것과 똑같죠?

 

엔터를 또 치시면 다음 10개 행(Line 11~20)이 출력됩니다. 엔터를 칠 때마다 열 줄씩 나오게 됩니다.

만약 list 명령을 실행했는데 소스 코드가 이상하게 나온다면, 빌드할 때 -g 옵션이 추가되지 않은 것이니, -g 옵션을 넣어서 다시 빌드하시기 바랍니다.

그나저나 VScode의 에디터로 소스 코드를 계속 확인할 수 있기 때문에 list 명령어는 잘 안 쓰시게 될 겁니다.

 

break

디버깅 하면 빠질 수 없는 기능 같습니다. breakpoint(정지점, 중단점)을 지정하는 기능이죠.

*명령어: break Line번호 또는 break 함수명

*기능: Breakpoint 지정

 

저는 함수명을 입력할 만한 게 없어서 Line 번호를 이용해 보았습니다.

break 7이라고 치니까

 

Breakpoint 1이 dtest.c의 line 7에 지정되었다고 나옵니다.

 

이제 run 명령을 실행하시면 Line 1~6를 실행하게 됩니다.

 

step

*명령어: step 또는 s

*기능: 현재 행 수행 후 정지. 함수 호출 시 함수 안으로 들어갑니다.

 

위 스크린샷은 Line 1~6까지 실행하고 현재 행이 Line 7인 상태에서 s 명령을 실행한 결과입니다.

Line 7인 printf("Hello world!\n");이 실행되었으며, Line 8은 공백이므로 현재 행이 Line 9으로 지정되었습니다.

 

next

*명령어: next 또는 n

*기능: 현재 행 수행 후 정지. 함수 호출 시 함수 수행 다음 행으로 넘어갑니다.

 

위 스크린샷은 Line 9까지 실행하고 현재 행이 Line 10인 상태에서 n 명령을 실행한 결과입니다.

Line 10인 b=2;가 실행되었으며, 현재 행이 Line 11으로 지정되었습니다.

제가 작성한 예시 코드에 main 함수 외에 다른 함수가 없어서 예를 잘 못 든 점 양해 부탁드립니다.(printf도 함수이긴 하지만 그건 stdio.h 안에 있는 함수라서...)

 

continue

*명령어: continue 또는 cont

*기능: Breakpoint(정지점)을 만날 때까지 수행

 

위 스크린샷은 Line 10까지 실행하고 현재 행이 Line 11인 상태에서 continue 명령을 실행한 결과입니다.

프로그램이 끝까지 실행되고 종료되었습니다.

 

whatis

*명령어: whatis 변수명

*기능: 변수의 type 출력

 

위 스크린샷은 Line 6까지 실행하고 현재 행이 Line 7인 상태에서 whatis a 명령을 실행한 결과입니다.

type = int 라고 출력되었습니다.

 

print

Logic error를 고치기 위해서 디버깅을 사용하다 보면 중간중간 변수의 값을 확인하고 싶을 때가 있을 것입니다. 그때마다 printf 함수를 이용할 수는 없으니 디버거의 print 기능을 이용합니다.

*명령어: print 변수명 또는 p 변수명

*기능: 변수에 저장된 현재 값을 한 번 출력

 

Line 6까지 실행하고 현재 행이 Line 7인 상태에서 print a 명령을 실행했더니 $1 = 0라고 출력되었습니다.

s 명령을 몇 번 해서 Line 9까지 실행하고 현재 행이 Line 10인 상태에서 print a 명령을 실행했더니 $2 = 1이 출력되었습니다.(Line 9가 a=1; 이었음.)

 

display

print는 변수의 값을 한 번만 출력합니다. Line별로 변하는 변수 값을 확인하고 싶다면 변수 값이 매번 출력되는 것이 좋겠죠? 그럴 때 사용할 수 있는 기능이 display입니다.

*명령어: display 변수명

*기능: 변수에 저장된 현재 값을 지속적으로 출력

 

위 스크린샷은 Line 9까지 실행하고 현재 행이 Line 10인 상태에서 display a 명령을 실행한 결과입니다.

1: d[1] = 0 이라고 출력되었습니다.

 

s 명령을 실행해서 Line 10까지 실행하고 현재 행이 Line 11인 상태가 되었습니다.

또 1: d[1] = 0 이라고 출력되었습니다.

 

눈에 띄는 변화를 보기 위해 Line 17에 Breakpoint를 지정하고 continue했습니다.

1: d[1] = 65 라고 출력되었습니다.(Line 13이 d[1]='A'이었음.)

 

set variable

*명령어: set variable 변수명 =

*기능: 변수 값을 변경

 

set variable d[1]=80 을 입력해 보았습니다.

엔터를 쳐도 어떤 메시지가 출력이 안 되는데요.

 

display 명령을 통해 확인해 보니 d[1] 값이 80으로 바뀌었네요. :)

 

info break

Breakpoint를 많이 지정하다 보면 자신이 어디에 Breakpoint를 지정했는지 잊어먹을 수 있죠. 이때 Breakpoint 목록을 확인하는 방법이 있습니다.

*명령어: info break

*기능: 설정되어 있는 Breakpoint 확인

 

이렇게 Breakpoint 목록을 확인하실 수 있습니다.

혹시 제거하고 싶은 Breakpoint가 있다면, Num 열과 What 열에 주목하세요!

 

delete

[특정 Breakpoint를 제거할 때]

*명령어: delete Num

(Num은 info break 명령을 통해서 확인)

*기능: 특정 Breakpoint 제거

 

Breakpoint 1이 dtest.c:7인 상태에서 delete 1 명령을 실행해 보았습니다.

 

run 명령을 실행했을 때 Breakpoint 2까지 실행되어, Line 16까지 실행되고 현재 행이 Line 18로 지정되었습니다.(Breakpoint2가 Line 17인데 현재 행이 Line 18인 이유: Line 17은 공백임.)

 

[모든 Breakpoint를 제거할 때]

*명령어: delete

*기능: 모든 Breakpoint 제거

 

1. delete를 입력하고 엔터 칩니다.

2. Delete all breakpoints? (y or n)이 출력되면 y를 입력하고 엔터 칩니다.

 

run을 실행해 보니 Breakpoint 없이 끝까지 실행됩니다.

 

kill

프로그램을 실행하다가 Breakpoint에서 멈췄을 때 오류를 발견한다면 빨리 종료하고 소스코드 수정을 하고 싶겠죠? 이때 프로그램을 종료하는 명령어가 있습니다.

*명령어: kill

*기능: 프로그램 수행 강제 종료

 

1. kill 명령을 실행합니다.

2. Kill the program being debugged? (y or n)이 출력되면 y를 입력하고 엔터키를 누릅니다.

3. 프로그램이 강제 종료되었습니다.

 

quit

디버거를 종료하고 싶을 때

*명령어: quit 또는 q

*기능: gdb 디버거 종료

 

q를 입력하고 엔터 쳤더니 위와 같이 gdb 디버거가 종료되었습니다.

 

저의 글을 읽어 주셔서 감사합니다.

글을 쓰고 보니 굉장히 길군요. 긴 글 읽어 주셔서 감사합니다.

다음에 만나요!

 

참고 자료

1) 슈라 Shuuura. 2020. "[우분투 리눅스] gcc컴파일 및 디버깅", 슈라의 인생 Log. :). (2021. 07. 24. 방문). https://blog.naver.com/sera3579/222109588968

2) 현애. 2020. "[20] 리눅스 - gcc 컴파일러, gdb 디버거", 과제하는 공대생. (2021. 07. 24. 방문). https://blog.naver.com/aeae_1/222161714082

3) KwonZales. 2021. "[Linux] 리눅스의 디버거, gdb의 디버거와 사용법", 하고 싶은 게 많은, 일단은 개발자. (2021. 07. 24. 방문). https://kwonzales.tistory.com/35

4) 허정호. 2017. "[과제] gdb(디버거) 사용법", 허정호의 IT 공장. (2021. 07. 24. 방문). https://hyess.tistory.com/337

 

댓글을 달아 주세요

728x90

수성비전자방입니다. 필자는 갤럭시 북 Flex2를 사용하고 있습니다. Windows PC를 쓰는 데다가 PDF 파일을 볼 일이 많아서, 그 위에 필기하고 바로 저장하면 파일 관리가 쉽죠. 문제는 PDF 저장을 지원하는 필기 앱을 찾기가 어렵다는 것입니다. 오늘 PDF 파일 위에 필기하고 바로 저장까지 가능한 필기 앱을 소개해 드립니다. 바로, Drawboard PDF입니다!

 

설치 및 초기설정

1. Drawboard PDF는 Microsoft Store에서 내려받으실 수 있습니다.

https://www.microsoft.com/store/productId/9WZDNCRFHWQT

 

참고하시라고 시스템 요구 사항 올려드립니다.

 

Microsoft Store를 처음 쓰시는 분을 위해 알려드리자면, 받기를 클릭하신 뒤 설치를 클릭하시면 설치됩니다.

 

2. 설치 후 첫 실행입니다. 이름, 성, 전자 우편 주소, 회사 등을 입력하고 Next를 클릭합니다.

*참고(이용약관): https://www.drawboard.com/terms/?utm_source=DrawboardPDF&utm_medium=in-app&utm_campaign=formterms 

 

3. (이런 건 왜 선택하라는 걸까요?)

 

4. Explore dashboard 클릭.

 

이게 바로 여러분이 자주 보실 Drawboard PDF 메인 화면이 되겠습니다.

5. 왼쪽 아래 앱 설정을 클릭해 주세요.

 

6. 왼쪽 탭에서 계정을 클릭합니다.

7. 세부 정보 편집을 클릭합니다.

 

8. 정기적 이메일 업데이트 수신을 체크 해제하고, 완료를 클릭합니다.

(물론 정기적 이메일 업데이트 수신을 원하시는 분은 체크 해제하지 않으셔도 됩니다.)

*. 설정을 잘 보시면 Dashboard PDF Pro가 있는 것을 보실 수 있습니다. 이 글에 나와있는 기능은 무료 버전으로도 가능합니다. 유료 버전에 관심 있으신 분은 따로 알아보시기 바랍니다.

 

이제 아무 PDF 파일이나 실행해 주세요. 대충 Dashboard에 있는 샘플을 실행합시다.

그러면 사용 방법(튜토리얼?)을 알려주는데 알아서 읽어보시기 바랍니다.(영국식 영어로 안내되는 듯.)

 

9. Drawboard PDF를 PDF의 기본 연결 프로그램으로 설정하시려면 Yes를 클릭합니다.

10. Drawboard PDF를 클릭합니다.

11. 항상 이 앱을 사용하여 .pdf 파일 열기를 체크합니다.

12. 확인을 클릭합니다.

 

13. 그래도 기본 프로그램 설정이 안 되었다면서 이런 창이 뜨는데, 사실 설정 잘 된 거니까 Don't show me again에 체크하시고, No를 클릭하세요.

 

저는 이미 Drawboard PDF를 사용한 지 오래 되어서 샘플 말고 다른 PDF 파일을 실행했어요..

오른쪽 바(Tool)의 아이콘들을 원하시는 대로 추가하거나 제거할 수 있습니다.(이미 위의 스크린샷은 기본 설정이 아니죠?) 사실 사용방법 단락을 먼저 읽고 14~15번을 읽으시면 이해가 잘 되실 테지만, 초기설정 단락을 마무리 짓기 위해 이 부분을 먼저 정리합니다.

14. Mark-up Tools에서 원하는 펜이나 지우개 등을 선택하고 세부 옵션(색깔, 크기 등)을 선택합니다.

15. 오른쪽 아래의 +를 클릭하면 아이콘이 추가됩니다.

*. 오른쪽 바의 아이콘을 클릭하고, 오른쪽 아래의 휴지통 아이콘을 클릭하면 삭제됩니다.

*. 오른쪽 맨 아래의 양방향 화살표 아이콘을 클릭하면 Tool 바가 왼쪽으로 이동됩니다.

 

사용방법

1. 동그란 Drawboard PDF 로고를 클릭하시면,

 

이런 모양의 도구 모음(Mark-up Tools)이 나옵니다.

여기서 '펜'은 사실 일반적인 펜이 아니라 올가미, 선택, 텍스트, 레이저 등의 도구입니다.

일반적인 펜을 쓰시려면 '펜1', '펜2'를 선택하셔야 합니다.

'펜2'를 써 보시면 형광펜처럼 느끼실 수 있는데, 진정한 형광펜은 '형광펜'이라고 해서 따로 있습니다.

지우시려면 '지우개'를 쓰시거나 마우스 우클릭, S펜 버튼 등을 이용하시길 바라요.

'텍스트 강조 표시', '삽입'은 각자 알아보시고,,

'고급'에 대해서는 4~5번 과정에서 알아보겠습니다.

*참고로 삽입 기능 중 '측정'과 'Callout'은 유료 버전 전용입니다.(저는 무료 버전 사용자라서 측정과 Callout이 어떤 기능인지는 모르겠네요.^^ 필기하는 데 꼭 필요한 기능은 아닌 듯.)

2. 세부 설정(색상, 크기 등)을 지정하시려면 화살 모양(부등호라고 해야 하나?) 버튼을 클릭합니다.

 

3.

2번 과정에서 '펜1'의 세부 설정으로 들어온 화면입니다. 색상을 선택하실 수 있고, 불투명도, 크기 등도 조절하실 수 있습니다.

4. 이 밖의 색상 또는 더 세밀한 설정을 원하시면 '고급'을 클릭하세요.

 

5. 오른쪽 사이드바가 달라지면서 구체적인 설정이 가능합니다.

6. 고급 설정을 하시고 나서 이전 화면으로 돌아가시려면 화면 아래쪽에 있는 동그란 Drawboard PDF 로고를 클릭하시면 됩니다.

 

*. 참고로 Drawboard PDF는 필압을 지원합니다. 만약 필압을 지원하는 터치스크린을 사용하는데도 필기했을 때 필압 인식이 안 되었다면, Drawboard PDF 설정을 확인해 보시기 바랍니다.

 

저장 방법

앱을 그냥 닫으시면 저장이 안 됩니다. "저장하시겠습니까?" 경고창이 안 떠서 많은 사람들이 저장 안 된 줄 모르고 쓰다가 필기한 것 날아갔다고 불만을 갖는 듯 합니다.(저는 개인적으로 자동 저장을 선호하지 않는 편이긴 합니다.)

저장은 수동으로 하셔야 합니다.

 

1. 저장하시려면 왼쪽의 문서 옵션을 클릭하고, 저장하고 닫기 또는 다른 이름으로 저장 또는 다른 이름으로 저장(고급...)을 클릭합니다. 아니면 그냥 저장 아이콘을 클릭하셔도 됩니다.

키보드가 있다면 Ctrl+S 단축키를 사용하셔도 됩니다.

 

2. 나중에 다시 실행하실 때 굳이 Drawboard PDF에서 파일 찾기를 해도 되지만, 그냥 파일 탐색기에서 PDF 파일 실행하면 필기한 내용을 확인하실 수 있으므로 편리합니다.

 

*. 다른 프로그램(MS Edge, 스마트폰의 PDF 뷰어 등)으로 실행해도 필기한 내용을 모두 확인하실 수 있습니다.

 

저의 글을 읽어 주셔서 감사합니다.

파일 관리하시는 방식이 저와 비슷하다면, Drawboard PDF를 쓰시면 편리할 것입니다.

다음에 만나요!

 

댓글을 달아 주세요

728x90

수성비전자방입니다. 웹사이트를 만들고 나면 다른 사람들에게 보여주고 싶죠? 그런데 서버를 열기가 부담스러운 분들도 있을 것입니다. 웹호스팅 서비스를 이용하자니 요금이 부담될 수도 있죠. 그런 분들께 도움이 될 수 있는 정보를 드립니다. GitHub를 이용하는 방법입니다.

 

GitHub는 오픈소스 Git 저장소이므로 여러분이 올린 소스코드들을 다른 사람들도 보게 된다는 점 알아두세요!

보안이 중요한 웹사이트는 GitHub로 호스팅하면 안 되겠죠?

 

1. https://github.com 에 접속합니다.

2. 오른쪽 위의 Sign in을 클릭하여 로그인하거나, Sign up을 클릭하여 회원가입합니다.

*. Free 계정과 Pro 계정 중에서 선택할 수 있습니다. 오늘 할 것은 Free 계정으로 충분히 할 수 있는 일입니다.(아래 더보기 참고)

 

3. 좌측 상단의 New를 클릭하거나, 오른쪽 위의 +를 누르고 New repository를 클릭합니다.

(위의 스크린샷은 여러분의 화면과 다를 수 있습니다. 저는 이미 repository가 있어서...)

 

4. 빈칸을 적절히 채우시고 Create repository를 클릭합니다.

 

빈칸을 채운 예시입니다. 화질이 많이 안 좋지만...

 

그러면 이런 화면이 뜰 것입니다.

 

5. GitHub Desktop이 없으신 분은 설치하시기 바랍니다.

5-1. https://desktop.github.com 으로 접속합니다.

5-2. 본인 운영체제에 맞는 프로그램을 내려받습니다.

 

내려받아서 실행하면 그냥 GitHub Desktop이 열리는 것처럼 보이는데, 사실 PC에 설치된 것입니다.

 

5-3. Sign in to GitHub.com을 클릭합니다.

 

5-4. 웹브라우저 창에서 열기를 클릭합니다.

 

5-5. 계정을 설정합니다. GitHub 계정의 이름과 전자 우편(회원 정보의 메일과 @users.noreply.github.com 중 택1)을 그대로 사용하는 방법이 있고, 이름과 전자 우편을 사용자 지정하는 방법이 있습니다.

 

6. GitHub Desktop에서 Clone a repository from the Internet...을 클릭합니다.

('Clone'에 주목! 이미 로컬 repository가 있으신 분은 왼쪽 위 Current repository를 클릭하시고, Add를 누른 뒤, Clone a repository를 클릭합니다.)

 

7. 본인 repository들이 뜹니다. 원하는 repository를 선택하세요.

8. 로컬 파일 경로를 바꾸시려면 Choose...를 클릭하세요.(선택사항. 저는 안 했습니다.)

9. Clone을 클릭하세요.

 

그러면 repository 이름의 폴더가 정해진 파일 경로(기본값: 문서\GitHub)에 생겼을 것입니다.

 

10. 만들어진 폴더에 웹사이트의 모든 파일을 넣습니다.

11. GitHub Desktop의 왼쪽 아래 빈칸들을 적절히 채우시고, Commit to main을 클릭하세요.

 

12. 상단의 Publish branch를 클릭합니다.

 

이제 github.com/본인repository 로 들어가세요.

방금 올린 파일들이 있는 것을 보실 수 있습니다.

 

13. Settings에 들어갑니다.

14. Pages에 들어갑니다.

15. Source에서 None▼을 클릭하고, main을 클릭합니다.(Source를 main으로 설정하라는 소리.)

 

16. 경로가 /(root)인 것을 확인하시고, Save를 클릭합니다.

 

17. 이제 https://아이디.github.io/본인repository 로 들어가시면 웹사이트가 나오는 것을 확인하실 수 있습니다.

적용되는 데 시간이 걸릴 수 있으니 제대로 안 뜨면 잠시 기다려 주세요.

 

이제 PC에서 파일을 수정하거나 추가/삭제하면 GitHub Desktop 앱에서 안내가 있을 것입니다. 11~12번 과정과 마찬가지로 왼쪽 아래 빈칸을 적절히 채우시고, Commit to main을 클릭하신 뒤, Fetch origin 하시면, 시간이 흐른 뒤 적용됩니다.

 

저의 글을 읽어주셔서 감사합니다. 다음에 만나요!

댓글을 달아 주세요