Embedded Programming/Tips

Visual Studio 디버거 사용법 (Debugging)

중동콜링 2013. 3. 18. 17:22

오늘은 Visual Studio의 디버거 사용법을 익혀 보도록 해요


*디버깅(Debugging)이란? 

디버깅

[ debugging ]

오류 수정. 컴퓨터 프로그램의 잘못을 찾아내고 고치는 작업. 일단 작성된 프로그램들이 정확한가(즉 잘못 작성된 부분이 없는가)를 조사하는 과정. 이 작업은
① 기계에 넣기 전에 책상 위에서 주어진 문제대로 프로그램이 작성되었는가를 순서도와 메모리의 작업 영역표에 실제 데이터를 넣어서 수동 작업으로 정확한 결과가 나오는가를 검사하는 데스크 상의 검사와
② 컴퓨터를 이용한 표준적 데이터로 메인 루틴을 조사하는(이때 예외 사항이 포함된 데이터와 오류가 있는 데이터도 함께 이용한다) 컴퓨터를 사용한 검사,
③ 실제 데이터를 사용하는 조사 등 세 단계로 나누어 진행된다. 또한 이 작업은 프로그램의 한 스텝 한 스텝씩을 추적해가는 추적(trace) 기능을 이용해도 좋지만, 프로그램 처리 내용이나 기억 장치의 내용을 덤프하여 디버그 보조기(debugging aid)를 이용하는 것이 바람직하다.

출처

컴퓨터인터넷IT용어대사전, 전산용어사전편찬위원회 엮음, 2011.1.20, 일진사

한마디로 프로그램 오류를 잡는 건데.. 로직이 복잡해질 수록 오류잡기가 쉽지 않죠.

Visual Studio 디버깅 기능을 이용하면 한결 편하게 오류를 찾아낼 수 있습니다. 



우선 디버거 사용법을 위한 간단한 예제를 입력했습니다. (참고로 Visual Studio 버전은 2010입니다.)


그럼 다음엔 디버깅을 시작할 시작점을 찍어 볼까요??

알아보고 싶은 코드에 커서를 놓고

F9 키를 누르거나 Debug > Toggle Breakpoint 메뉴를 클릭합니다.


빨간 밑줄친 부분에서 보듯 커서가 있는 부분 좌측에 빨간 점이 찍힌 것을 확인 할 수 있답니다.


이후  F5 키를 누르거나 

메뉴에서 Debug > Start Debugging을 선택하면 디버깅 모드로 진!입!합니다.


디버깅 모드로 진입하면 아래 캡처화면과 같은 화면을

 볼 수 있어요~

①번 노란 화살표는 현재 지점을 가리키는 커서

②번은 늘 보던 콘솔 실행화면이죠

③번은 변수의 값의 변화를 확인할 수 있는 창입니다

④번은 사용자가 직접 변수이름을 입력해서 입력한 변수만 값의 변화를 지켜볼수 있구요

⑤번은 메모리의 모습을 보여주는 창이에요!

⑤창이 보이지 않으면 Debug > Windows 에서 해당 창을 불러올 수 있어요!


여기서 F11 키를 입력하면 한줄씩 실행을 해볼수 있습니다.

우선 F11 키를 한번 입력했을 때의 화면입니다.

① 여기서 노란색 화살표가 이동한걸 확인할 수 있네요. 현재 실행한 부분 바로 밑줄로 커서가 이동합니다.

④번 Autos 창을 보면 자동으로 창에 변수이름과 그 값이 뜹니다.

 초기화가 아직 안됐으므로 쓰레기값이 들어가 있는게 보이네요.

③번과 같이 주소연산자 &(변수이름) 을 입력하면 주소와 함께 그 변수의 값을 볼 수 있습니다.

②번 메모리 창 역시 &(변수이름)을 입력하고 엔터키를 누르면 바로 메모리 주소를 보여줍니다.


여기서 잠깐! 

디버깅 진행 단축키를 알아볼까요~

F11 키는 코드 한줄씩(변수의 값이 변화가 있는 부분만 되는거 같네요)이동하면서 변수변화를 알려주고 F10 키는 그냥 한줄을 뛰어 넘습니다. printf()같은 라이브러리 함수를 만나면 F10키를 눌러줘야해요!

만약 라이브러리 함수에서 실수로 F10키를 눌렀을때 빠져나오려면 Shift+F11로 빠져 나오면 됩니다.



F11키로 계속 디버깅을 진행시켜보면 변수의 값이 변할 때마다 빨간색으로 표시되는 것을 볼 수 있어요

①,②,③ 에서 보면 iSum의 값이 변하는 것을 확인 할 수 있죠.

②번 창에서 알 수 있는 메모리의 주소가 ①번 창에서 확인 할 수 있네요. 

int는 4 byte니깐 네 칸이 바뀐것을 알수 있습니다.

여기서 이상한 점은 변수의 값이 0x 00 00 00 01로 저장되는 것이 아니라 0x 01 00 00 00 의 형태로 거꾸로 저장되는 것을

확인할 수 있는데... 이건 intel CPU가 little endian이라는 데이터 저장방식을 따르기 때문입니다.

이 방식이 산술연산에는 더욱 빠른 장점을 가지지만 논리연산은 상대적으로 느리다고 합니다.

 little endian, big endian에 대해서는... 다음에 다루도록 하죠.(장담은 못함)


이번 캡처 화면은 위 화면에서 실수로 F11을 눌렀을 때 나타나는 화면입니다.

prinf()함수를 만났을 때죠.. 

printf()를 만나면 누구든 X되는 거에요...

이럴 땐 F11을 수십번은 눌러야 벗어날 수 있으니 Shift+F11로 탈출해줍니다.

물론 애초에 F10 키로 넘어가는게 좋겠죠.


마지막으로 디버깅을 종료하고 싶을 땐 F5 키를 입력하면 원래 소스코드 화면으로 복귀할 수 있습니다.


오늘의 알아본 기능 단축키 정리입니다.(이것만 올려도 될 것을...)

단축키

기능

중단점(breakpoint) 지정

F9

디버깅 시작/종료

F5

디버그 진행

F11

한 줄 뛰어넘기

F10

현재 과정 벗어나기(?)

SHIFT + F11

변수 확인 창이 안 보일 때

Debug > Windows 메뉴에서 불러온다

 

제어문이 복잡하게 겹치면서 원하는 값이 안나올때! 

디버깅 기능을 이용하면 차분하게 단계별로 변수 값의 변화를 지켜볼 수 있어

에러잡기가 한결 수월합니다!!


이상 디버깅 기능 포스트는 마치겠습니다.