디버깅(debugging)이란 프로그램 개발의 마지막 단계에서 프로그램의 오류를 발견하고 그 원인을 밝히는 작업 과정을 말한다.
버그(bug)는 벌레를 뜻하고 디버그(debug)는 원래 "해충을 잡다"라는 뜻으로서, 프로그램의 오류를 벌레에 비유하여 오류를 찾아 수정하는 일이라는 의미로 쓰인다. 하드웨어 분야에서 디버그는 H/W 장치의 설계 오류를 없앤다는 의미를 갖고 있는 반면, 프로그래밍에서 "디버깅한다"는 것은 프로그램의 잘못을 검출, 추적, 삭제한다는 뜻이다. 주로 디버그(debug)가 오류수정 작업을 뜻하는 반면, 작업 과정에 중점을 둔 어휘는 디버깅(debugging)을 쓴다. 즉, 오류 수정 작업은 디버그이고, 작업 과정은 디버깅이며, 오류 수정 소프트웨어는 디버거(debugger)라고 한다.
1945년 9월 9일 최초의 컴퓨터 버그;'디버깅'(debugging)이란 개념이 출현하게 된다. 컴퓨터를 사용하던 초장기 시절에 컴퓨터의 크기는 매우 컸다. 여러방에 연속으로 기계장치들을 연결해놓았다고 생각했을때, 어느날 컴퓨터가 제대로 작동되지않았다. 원인을 모르고 찾고 있던 중, 컴퓨터 부품 중 하나에 나방이 끼어있었고, 이 나방이 컴퓨터가 작동되지않는 문제의 원인이였던것이다. 이 과정에서 나방을 제거함으로써 오류가 해결되었고 이를 de + bug 했다는 의미로 디버깅이라는 말이 생겨나게 되었다. [1]
기능
|
설명
|
Debug
|
디버깅 모드에서 발생하는 메시지를 표시한다.
|
Breakpoints
|
디버깅 모드에서 일시 정지할 위치를 스크립트 코드상에 지정할 수 있다. 중단점으로 지정된 위치는 Breakpoints 창에서 목록 형태로 확인할 수 있다.
- Enable : 중단점을 지정한 줄에서 실행을 멈춘다.
- Disable : 중단점을 비활성화한다. 애플리케이션 실행시 무시된다.
- Conditional Enable : 중단점에 설정된 조건이 일치할 경우에만 실행을 멈춘다.
- Conditional Disable : 조건부 중단점을 비활성화한다. 애플리케이션 실행시 무시된다.
|
Call Stack
|
현재 상태까지 거쳐온 함수를 역순으로 표시해준다. 함수를 더블 클릭하면 해당 소스의 위치로 이동합니다.
|
Variables
|
현재 상태에서 확인이 가능한 변수, 객체의 상태 값을 조회한다. 변수인 경우에는 해당 값을 보여주고, 객체인 경우에는 해당 객체의 속성을 트리 형태로 조회할 수 있다.
|
Watch
|
특정 변수나 객체의 값을 등록해놓고 변화되는 값을 관찰할 수 있다. 특히 스텝 기능을 사용할시 유용하다.
|
디버깅하는 방법은 프로그래머가 직접 손으로 해보고 눈으로 확인하는 테이블 디버깅과 디버깅 소프트웨어를 이용하는 컴퓨터 디버깅이 있다.
테이블 디버깅[편집]
테이블 디버깅(table debugging)은 프로그램 리스트에서 오류의 원인을 추적하는 방법이다. 원시 프로그램을 읽어가며 분석하는 코드 리뷰(code review) 방식과 오류가 발생한 데이터를 사용하여 원시 프로그램을 추적하는 워크스루(walk-through) 방식으로 나뉜다.
컴퓨터 디버깅[편집]
컴퓨터 디버깅(computer debugging)은 프로그래머가 제공하는 각종 정보와 디버깅 소프트웨어를 이용하여 누구든지 디버깅할 수 있는 방식이다. 여기에는 디버거 방식과 디버그행 방식, 그리고 기계어 방식이 있다.
- 디버거 방식 : 프로그램을 시험할 때 디버깅 모드로 컴파일하여 디버거 기능을 포함시켜 사용하면서 오류에 관한 각종 정보를 수집하는 방식이다. 원시 프로그램을 수정하는 일이 없이 정보를 수집할 수 있는 장점이 있으나, 디버깅에만 의존해야 하므로 정보를 수집할 수 있는 범위가 한정되어 있어 완벽하게 디버깅하기 어렵다.
- 디버그행 방식 : 수집하고 싶은 정보를 출력하기 위한 디버깅용 명령을 미리 프로그램 곳곳에 삽입하여 실행시키는 방식이다. 프로그램이 각 지점을 정상적으로 통과하는지 확인한다. 이 방식은 세밀한 정보수집에 유용하지만 디버깅 완료 후 원시 프로그램을 수정해야 하는 번거로움이 있다.
- 기계어 방식 : 정보를 수집하고자 하는 장소의 주소와 범위를 기계어 수준으로 지정하고, 운영체제의 디버깅 기능을 사용하여 정보를 수집하는 방식이다. 운영체제가 서비스하는 프로그램을 그대로 사용할 수 있다. 하지만 기계어이기 때문에 정보수집 및 분석이 어렵고 시간이 걸린다.
참고자료[편집]
- 넥사크로플랫폼 17 컴포넌트 활용 워크북 17.1.2.100,〈디버그 기능〉, 《넥사크로플랫폼》, 2020-06-06
같이 보기[편집]
이 디버깅 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.
|
개발 : 프로그래밍 □■⊕, 소프트웨어, 데이터, 솔루션, 보안, 하드웨어, 컴퓨터, 사무자동화, 인터넷, 모바일, 사물인터넷, 게임, 메타버스, 디자인
|
|
프로그래밍 언어
|
ASP • C 언어 • C++ • C# • CSS • D 언어 • HTML • HTML5 • JSP • PHP • R • XHTML • XML • XSLT • 고(Go) • 고급언어 • 기계어 • 델파이 • 러스트 • 루비 • 루아 • 리액트 • 리퀴디티 • 무브 • 미켈슨 • 베이직 • 브이비스크립트 • 비주얼 C++ • 비주얼베이직(VB) • 비주얼베이직닷넷(VB.NET) • 솔리디티 • 스몰토크 • 스위프트 언어 • 스칼라 • 스크립트 언어 • 알골 • 어셈블리 • 언리얼스크립트 • 얼랭 • 에이잭스(Ajax) • 엠에프씨(MFC) • 오브젝티브-C • 오브젝트 파스칼 • 오카멜 • 웹어셈블리(WASM) • 이와즘(eWASM) • 자바 • 자바스크립트 • 저급언어 • 제이슨(JSON) • 제이쿼리(jQuery) • 카멜 • 코볼 • 코틀린 • 콜드퓨전 • 타입스크립트 • 파스칼 • 파워스크립트 • 파이썬 • 펄(Perl) • 포트란 • 프로씨(Pro-C) • 피엘에스큐엘(PL/SQL) • 피엘원(PL/I) • 하스켈
|
|
개발방법론
|
CBD 개발방법론 • EA • 구조적 개발방법론 • 객체지향 개발방법론 • 라이브러리 • 람다 아키텍처 • 모듈 • 모듈화 • 벤치마킹 • 소프트웨어 개발방법론 • 스크럼 • 스프린트 • 아키텍처 • 아키텍트 • 애자일 • 웹개발방법론 • 정보공학 개발방법론 • 컴포넌트 • 테일러링 • 템플릿 • 폭포수 모델 • 프로젝트 • 프로토타입 • 피드백
|
|
코딩
|
EUC-KR • UTF-8 • 값 • 글루웨어 • 노팔로우 링크 • 두팔로우 링크 • 디버깅 • 디코딩 • 마크업 • 버그 • 부트스트랩 • 세이브포인트 • 소스코드 • 시큐어코딩 • 아스키 • 액티브엑스 • 오픈소스 • 유니코드 • 인코딩 • 재컴파일 • 주석 • 컴파일 • 컴퓨터 프로그램 • 코드 • 코딩 • 태그 • 테스트 • 테이블 • 텍스트 • 파싱 • 퍼블리싱 • 퓨니코드 • 하드코딩 • 하이퍼링크 • 하이퍼텍스트
|
|
프로그래밍
|
C 명령어 • 객체 • 객체지향 • 객체지향 프로그래밍 • 거짓 • 관계연산자 • 기본형 변수 • 널 • 논리 • 논리연산 • 논리연산자 • 다중상속 • 다형성 • 대입 • 대입문 • 대입연산자 • 더블 • 도스 명령어 • 디폴트 • 레지스터변수 • 루프 • 리눅스 명령어 • 리턴 • 메모리 주소 • 메소드 • 멤버 • 명령문 • 명령어 • 무한루프 • 문자 • 문자열 • 바이트 • 반복문 • 배열 • 변수 • 분기 • 분기문 • 불린 • 브레이크 • 비교연산자 • 비트연산자 • 산술연산자 • 상속 • 상수 • 생성자 • 선언 • 선언문 • 설정자 • 속성 • 스위치 • 스태틱 • 시프트연산자 • 실행 • 실행문 • 어노테이션 • 에코 • 역참조 • 연산 • 연산문 • 연산자 • 오버로딩 • 오버라이딩 • 외부변수 • 윈도우 명령어 • 유닉스 명령어 • 인스턴스 • 인스트럭션 • 인클루드 • 인터페이스 • 임포트 • 입력 • 입력문 • 입출력 • 입출력문 • 자료형(데이터 타입) • 자바 명령어 • 자바 예약어 • 자바 컬렉션 • 전역변수 • 접근자 • 접근제어자 • 정보은닉 • 정수형 • 정적변수 • 제어 • 제어문 • 제어자 • 조건 • 조건문 • 조건연산자 • 주소 • 증감연산자 • 지역변수 • 참 • 참조 • 참조변수 • 초기화 • 추상메소드 • 추상클래스 • 추상화 • 출력 • 출력문 • 캡슐화 • 케이스 • 클래스 • 파라미터(매개변수) • 파이널 • 패키지 • 퍼블릭 • 포인터 • 프라이빗 • 프로텍티드 • 필드(멤버변수) • 함수 • 환경변수
|
|
명령어
|
abstract • array • boolean • break • byte • case • char • continue • default • double • do while • echo • elif • else • else if • false • final • float • for • gosub • goto • if • if else • import • include • int • join • long • long long • null • print • printf • println • private • protected • public • return • scanf • short • stdio.h • static • string • switch • temp • then • true • unsigned • void • while
|
|
디자인패턴
|
구조패턴 • 동시성패턴 • 동시실행패턴 • 모델-뷰-컨트롤러 패턴 • 상태패턴 • 생성패턴 • 싱글톤패턴 • 아키텍처패턴 • 전략패턴 • 커맨드패턴 • 행동패턴
|
|
프로그래밍 인물
|
귀도 반 로썸 • 그레이스 머레이 호퍼 • 니클라우스 비르트 • 댄 브릭클린 • 더그 커팅 • 데니스 리치 • 리누스 토르발스 • 리처드 그린블라트 • 마거릿 해밀턴 • 마크 앤드리슨 • 빈트 서프 • 빌 게이츠 • 빌 조이 • 스티브 잡스 • 에이다 러브레이스 • 제임스 고슬링 • 척 벤턴 • 켄 톰슨 • 팀 패터슨
|
|
위키 : 자동차, 교통, 지역, 지도, 산업, 기업, 단체, 업무, 생활, 쇼핑, 블록체인, 암호화폐, 인공지능, 개발, 인물, 행사, 일반
|
|