디버거

Debugger
Winpdb 디버깅 자체

디버거(debugger) 또는 디버깅 툴(debugging tool)은 다른 프로그램을 테스트하고 디버깅하는 데 사용되는 컴퓨터 프로그램입니다.디버거의 주된 용도는 프로그래머가 그것의 실행을 추적하고 오작동 코드를 나타낼 수 있는 컴퓨터 자원의 변화를 감시할 수 있도록 제어된 조건에서 대상 프로그램을 실행하는 것입니다.일반적인 디버깅 기능은 특정 지점에서 대상 프로그램을 실행 또는 중지하고, 메모리, CPU 레지스터 또는 저장 장치(예: 디스크 드라이브)의 내용을 표시하며, 프로그램 실행 오류의 원인이 될 수 있는 선택된 테스트 데이터를 입력하기 위해 메모리 또는 레지스터의 내용을 수정하는 기능을 포함합니다.

검사할 코드는 ISS(Instruction Set Simulator)에서 실행될 수도 있습니다. ISS는 특정 조건이 발생했을 때 이 기능을 정지시키는 강력한 파워를 허용하지만 일반적으로 해당 프로세서에서 직접 코드를 실행하는 것보다 다소 느립니다.일부 디버거는 이러한 영향을 제한하기 위해 전체 또는 부분 시뮬레이션의 두 가지 작동 모드를 제공합니다.

"트랩"은 프로그래밍 버그나 잘못된 데이터 때문에 프로그램을 정상적으로 계속할 수 없을 때 발생합니다.예를 들어, 프로그램이 현재 버전의 CPU에서 사용할 수 없는 명령을 사용하려고 시도했거나 사용할 수 없거나 보호된 메모리에 액세스하려고 시도했을 수 있습니다.프로그램이 "트랩"되거나 미리 설정된 조건에 도달하면 디버거는 소스 레벨 디버거 또는 심볼릭 디버거인 경우 일반적으로 원래 코드의 위치를 표시합니다.하위 디버거 또는 기계 언어 디버거인 경우 분해 시 줄이 표시됩니다(원래 소스 코드에 온라인으로 액세스할 수 있고 어셈블리 또는 컴파일에서 해당하는 부분의 코드를 표시할 수 있는 경우가 아니라면).

특징들

일반적으로 디버거는 쿼리 프로세서, 심볼 리졸버, 표현 해석기 및 디버그 지원 인터페이스를 최상위 레벨에 제공합니다.[1]디버거는 또한 중단점을 통해 프로그램을 단계적으로 실행하거나(단일 스텝 또는 프로그램 애니메이션), 일부 이벤트 또는 지정된 명령에서 프로그램을 중지(중단하여 현재 상태를 검사), 변수 값을 추적하는 등 보다 정교한 기능을 제공합니다.[2]일부 디버거는 프로그램이 실행되는 동안 프로그램 상태를 수정할 수 있습니다.충돌이나 논리적 오류를 우회하기 위해 프로그램의 다른 위치에서 실행을 계속할 수도 있습니다.

디버거를 버그 수정에 유용하게 사용하는 것과 동일한 기능을 통해 복사 방지, 디지털 권한 관리 및 기타 소프트웨어 보호 기능을 회피하는 소프트웨어 크래킹 도구로 사용할 수 있습니다.또한 명령어 경로 길이가 표시된 경우 일반적인 검증 도구, 장애 범위 및 성능 분석기로도 유용합니다.[3]디스크 기반 스토리지를 갖춘 초기 마이크로컴퓨터는 손상된 디렉토리 또는 레지스트리 데이터 레코드를 진단 및 복구하거나, 삭제된 것으로 표시된 파일을 "삭제 해제"하거나, 파일 암호 보호를 해제할 수 있는 이점을 누렸습니다.

gdbdbx와 같은 대부분의 메인스트림 디버깅 엔진은 콘솔 기반 명령줄 인터페이스를 제공합니다.디버거 프론트엔드IDE 통합, 프로그램 애니메이션 및 시각화 기능을 제공하는 디버거 엔진의 일반적인 확장 기능입니다.

기록 및 재생 디버깅

"소프트웨어 비행 기록"[4] 또는 "프로그램 실행 기록"으로도 알려진 기록 및 재생 디버깅은 프로그램의 각 명령이 실행될 때 응용 프로그램 상태 변경을 캡처하여 디스크에 저장합니다.그런 다음 기록을 반복해서 재생하고 결함을 진단하고 해결하기 위해 상호작용적으로 디버깅할 수 있습니다.기록 및 재생 디버깅은 원격 디버깅과 간헐적, 비결정적 및 기타 재현하기 어려운 결함을 해결하는 데 매우 유용합니다.

리버스 디버깅

일부 디버거는 "역 디버깅"이라는 기능을 포함하며, "역 디버깅" 또는 "역 디버깅"이라고도 합니다.이 디버거들은 프로그램의 실행을 시간에 역행하는 것을 가능하게 합니다.다양한 디버거들이 이 기능을 포함합니다.Microsoft Visual Studio(2010 Ultimate Edition, 2012 Ultimate, 2013 Ultimate 및 2015 Enterprise Edition)는 C#, Visual Basic에 대한 IntelliTrace 역 디버깅을 제공합니다.NET, 그리고 다른 언어들도 있지만, C++는 아닙니다.C, C++, Java, Python, Perl 및 기타 언어에 대해서도 역 디버거가 존재합니다.일부는 오픈 소스이고 일부는 독점 상용 소프트웨어입니다.일부 리버스 디버거는 크기가 몇 배 이상으로 목표 속도를 늦추지만, 최고의 리버스 디버거는 2배 이하의 속도를 냅니다.역방향 디버깅은 특정 유형의 문제에 매우 유용하지만 아직 일반적으로 사용되지는 않습니다.[5]

시간 이동 디버깅

역 디버거의 기능 외에도 시간 여행 디버깅을 통해 사용자는 프로그램과 상호 작용하여 원하는 경우 기록을 변경하고 프로그램이 어떻게 반응하는지 볼 수 있습니다.

언어의존성

어떤 디버거는 특정 언어 하나로 작동하는 반면 다른 디버거는 여러 언어를 투명하게 처리할 수 있습니다.예를 들어, 주요 대상 프로그램이 COBOL로 작성되었지만 어셈블리 언어 서브루틴과 PL/1 서브루틴을 호출하는 경우, 디버거는 발생하는 언어의 변화를 수용하기 위해 동적으로 모드를 전환해야 할 수 있습니다.

메모리 보호

일부 디버거는 버퍼 오버플로와 같은 스토리지 위반을 방지하기 위해 메모리 보호 기능을 통합하기도 합니다.이는 메모리 '풀'에서 작업별로 메모리를 동적으로 할당하는 트랜잭션 처리 환경에서 매우 중요할 수 있습니다.

디버깅을 위한 하드웨어 지원

대부분의 최신 마이크로프로세서는 디버깅을 보다 쉽게 하기 위해 CPU 설계에 다음과 같은 기능 중 하나 이상을 포함하고 있습니다.

  • 트랩 플래그와 같은 단일 스텝 프로그램을 지원하는 하드웨어입니다.
  • Popek Goldberg 가상화 요구 사항을 충족하는 명령어 집합을 사용하면 디버그되는 소프트웨어와 동일한 CPU에서 실행되는 디버거 소프트웨어를 더 쉽게 작성할 수 있습니다. 이러한 CPU는 테스트 대상 프로그램의 내부 루프를 최대 속도로 실행할 수 있지만 여전히 디버거 제어 하에 있습니다.
  • 시스템프로그래밍을 통해 외부 하드웨어 디버거가 테스트 대상 시스템을 다시 프로그래밍할 수 있습니다(예: 명령 중단점 추가 또는 제거).이러한 ISP 지원이 있는 많은 시스템에는 다른 하드웨어 디버그 지원도 있습니다.
  • 주소 비교기 및 데이터 값 비교기와 같은 코드 및 데이터 중단점에 대한 하드웨어 지원 또는 작업량이 상당히 많은 페이지 장애 하드웨어.[6]
  • ARM 아키텍처 프로세서에 있거나 Nexus 명령 집합을 사용하는 것과 같은 하드웨어 디버그 인터페이스에 대한 JTAG 액세스.임베디드 시스템에 사용되는 프로세서는 일반적으로 광범위한 JTAG 디버그 지원을 받습니다.
  • 6개 이하의 핀을 가진 마이크로컨트롤러는 BDM, Spy-Bi-Wire 또는 디버그와 같은 JTAG의 낮은 핀 수 대용품을 사용해야 합니다.아트멜 AVR와이어를 연결합니다.예를 들어, DebugWIRE는 RESET 핀에서 양방향 시그널링을 사용합니다.

디버거 프론트엔드

가장 유능하고 인기 있는 디버거 중 일부는 간단한 CLI(명령줄 인터페이스)만 구현합니다. 종종 휴대성을 극대화하고 리소스 소모를 최소화하기도 합니다.개발자들은 일반적으로 그래픽 사용자 인터페이스(GUI)를 통한 디버깅이 더 쉽고 생산적이라고 생각합니다.[citation needed]이는 그래픽 사용자 인터페이스를 통해 하위 CLI 전용 디버거를 모니터링하고 제어할 수 있는 시각적 프론트엔드의 이유입니다.일부 GUI 디버거 프론트엔드는 다양한 CLI 전용 디버거와 호환되도록 설계된 반면 다른 것들은 특정 디버거를 대상으로 합니다.

디버거 목록

널리 사용되는 디버거는 다음과 같습니다.

이전 미니 컴퓨터 디버거는 다음과 같습니다.

메인프레임 디버거는 다음과 같습니다.

참고 항목

참고문헌

인용문

  1. ^ 아그가르왈과 쿠마르, 302쪽.
  2. ^ Aggarwal과 Kumar 2003, p. 301.
  3. ^ 아그가르왈과 쿠마르, 페이지 307-312.
  4. ^ O'Callahan, Robert; Jones, Chris; Froyd, Nathan; Huey, Kyle; Noll, Albert; Partush, Nimrod (2017). "Engineering Record And Replay For Deployability Extended Technical Report". arXiv:1705.05937 [cs.PL].
  5. ^ Philip Claßen; Undo Software. "Why is reverse debugging rarely used?". Programmers Stack Exchange. Stack Exchange, Inc. Retrieved 12 April 2015.
  6. ^ Aggarwal과 Kumar 2003, pp. 299-301.

원천

외부 링크