디버깅이란?

About the word “Debugging”

용어의 뜻


디버깅은 프로그램 실행 시 문제를 일으키는 오류, 즉 ‘버그’를 찾아 해결하고 수정하는 것을 의미합니다.

 

버그의 종류


‘버그’는 크게 문법적 오류논리적 오류로 분류할 수 있습니다.

문법적 오류는 말 그대로 그 프로그래밍 언어의 문법에 맞지 않는 코드가 있을 경우 발생합니다. 대체로 문법적 오류는 IDE로 해결할 수 있기 때문에 디버깅이 쉬운 편입니다.

논리적 오류는 문법적으로 문제가 없지만, 의도와는 맞지 않게 프로그램이 돌아가는 오류를 말합니다. 이 부분은 IDE의 기능 만으로는 해결되지 않으며, 프로그래머가 가장 골치아파하는 오류입니다. 문법은 고치면 그만이지만, 논리적 오류는 잘못하면 코드 전체를 갈아엎어야 할 수도 있기 때문이죠.

 

디버깅 예시

문법적 오류는 다들 아실테고, 그렇다면 논리적 오류를 기준으로 해서 디버깅의 예시를 들어보겠습니다.

#include <stdio.h>
#define MULTI(a, b) a * b
 
int main()
{
    int a = 2;
    int b = 10;
    int c = MULTI(a + 2, b + 2);
    printf(“c is %d\n”, c);
    return 0;
}
cs

두 개의 수를 인자로 사용해 두 수를 곱한값을 반환하는 MULTI라는 매크로 함수가 있습니다. 원래 의도대로라면 a, b에서 2를 각각 더해서 곱해 4 * 12 = 48이라는 값이 반환되어야 합니다. 그러나, 실제로는 24라는 값이 반환됩니다.

이 오류가 바로 가장 골치아픈 논리적 오류입니다. 문법적으로 문제는 없으나, 원래의 의도와는 다르게 흘러가는 것이죠.

저게 왜 저렇게 되었는지, 어떻게 해결하는지에 대해서는 C++ inline 포스트에서 매크로(#define)의 고질적인 문제와 함께 다루도록 하겠습니다.

문제점을 알았다면 해결해야겠죠. 어떻게 하면 고칠 수 있을 지 알아내야죠. 이게 바로 디버깅입니다. 문제가 발생했을 때, 문제의 원인을 찾아 분석하고, 분석한 결과를 토대로 문제를 해결하는 과정을 바로 디버깅이라고 합니다.

용어의 유래


“디버깅”이라는 단어는 프로그래머, 그레이스 호퍼에 의해 만들어진 단어입니다. 어느 날, 호퍼는 Mark Ⅱ 컴퓨터에서 오작동을 발견하였고, 그 원인이 나방임을 알아내 컴퓨터에서 핀셋으로 꺼냈습니다.(세계 최초의 디버깅.) ‘버그’라는 단어는 1800년 대 부터 기술적인 오류를 가리키는 말로도 사용되었지만, ‘디버깅’이라는 단어는 이 때 처음으로 사용되었습니다.

 

디버깅의 중요성


프로그래밍에 있어 디버깅은 필수적인 요소입니다. 실제 개발할 때에도 가장 중요한 부분입니다. 디버깅을 얼마나 잘하느냐에 따라 프로그래머의 실력이 갈릴 정도로 프로그래머에게 있어 가장 중요한 능력이 디버깅 능력입니다. 따라서 프로그래머는 디버거 없이 디버깅을 하는 연습을 하는 것이 필요합니다.

글쓴이: BakJH

Student of Daedeok SW Meister Highschool, in Korea.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중