디버깅 코드

Debug code

디버깅 코드는 에러를 테스트하거나 에러의 원인을 특정하기 위해 컴퓨터 프로그램입력되는 컴퓨터 코드입니다.프로그램의 특정 지점에서 변수의 값을 인쇄하는 것은 에코 명령처럼 간단할 수 있습니다.현대의 통합 개발 환경에서는 프로그램의 특정 장소에 정지점을 배치할 수 있고 프로그램 출력이 아닌 IDE를 통해 변수의 값을 볼 수 있는 기능을 제공함으로써 이를 불필요하게 만들 수 있습니다.

디버깅 코드 사용

디버깅 코드의 주요 기능은 디버깅 코드를 지원하는 것입니다.이를 위해서는 인쇄문 사용, 아사트 명령 및 장치 테스트 등 여러 가지 방법이 있습니다.

코딩에 사용

프로그램 내 버그의 존재와 위치를 찾기 위해 코드에 작은 문을 추가할 수 있습니다.또한 프로그램이 수용해야 할 수 있는 사용 사례를 시뮬레이션하기 위한 테스트 입력을 제공하는 데도 사용할 수 있습니다.아직 개발 중인 코드의 플레이스 홀더로도 사용할 수 있습니다.

비디오 게임에서 사용

많은 비디오 게임 모드, 치트 코드, 예를 들어 레벨 치트 코드, 인비전스 등의 치트 코드는 원래 디버깅 코드로 도입되어 프로그래머나 테스터가 테스트해야 할 게임의 일부에 빠르게 접근할 수 없도록 하는 장애물을 건너뛸 수 있습니다.이 경우 치트 모드는 종종 디버깅 모드라고 불립니다.

디버깅 코드를 어플리케이션의 실제 버전에서 삭제하는 것이 좋습니다.디버깅 코드가 [1]느려질 수 있기 때문입니다.그러나 일부 게임들은 플레이어들이 플레이 경험을 향상시키기 위한 방법으로 사용할 수 있도록 이러한 명령과 속임수를 남겨둔다.예를 들어, Skyrim의 PC 버전은 플레이어가 명령 콘솔에 액세스할 수 있도록 하며, 게임 실행 중에 게임의 특정 측면을 수정할 수 있는 기능을 제공합니다.이러한 명령어에는 플레이어에게 무적, 순간이동 및 무제한 [2]골드가 포함됩니다.

디버깅 코드의 예

인쇄 디버깅

인쇄 디버깅은 프로그램 내의 버그를 검출하고 분리하기 위해 인쇄문을 사용하는 것입니다.코드 조각의 데이터 값 흐름을 추적하는 데 사용할 수 있습니다.이런 종류의 디버깅코드에는 몇 가지 분명한 단점이 있습니다.이것은 일시적인 것으로, 통상, 버그가 해결되면 삭제됩니다.많은 인쇄문을 사용하면 프로그램의 실제 출력에 영향을 주고 인쇄문을 호출하는 빈도에 따라 실행 시간이 느려질 수 있습니다.경우에 따라서는 인쇄문이 문제의 검출에 도움이 되지 않는 경우가 있습니다.예를 들어 C++ stdout에 버퍼 출력이 포함되어 있어 버퍼의 내용이 손실되어 디버깅 [3]정보가 잘못될 수 있습니다.

C++의 예

무효 테스트 기능(인트 실행 시간) {   외치다 << > "알고리즘이 실행되어야 합니다." << > 실행 시간 << > "회" << > 표준::;   위해서 (인트 i = 0; i <=> 실행 시간; i++) {     // 알고리즘 실행     알고리즘.();     // debug print 문     외치다 << > "실행" << > i++ << > "회" << > 표준::;   } } 

위 코드에 버그가 있습니다.5 를 입력하면 프로그램은 다음 내용을 콘솔에 출력합니다.

알고리즘은 5회 알고리즘을 1회 실행해야 합니다.알고리즘은 2회 실행됩니다.알고리즘은 3회 실행됩니다.알고리즘은 4회 실행됩니다.알고리즘은 5회 실행됩니다. 

실제 출력은 다음과 같습니다.오류입니다.

알고리즘은 5회 알고리즘을 1회 실행해야 합니다.알고리즘은 2회 실행됩니다.알고리즘은 3회 실행됩니다.알고리즘은 4회 실행됩니다.알고리즘은 5회 실행됩니다.알고리즘은 6회 실행됩니다. 

이 함수는 알고리즘을 통해 추가 시간 동안 실행되며 자세히 살펴보면 루프가 잘못 코딩된 것이 분명합니다.

어설션 스테이트먼트

일반적으로 버그를 수정하는 가장 좋은 시기는 프로그램을 실행하기 전입니다.이것은 코드에 어사션을 삽입함으로써 실행할 수 있습니다.C에서는 assert() 명령을 사용하여 이를 수행할 수 있습니다.아사트 명령은 프로그램이 [4]이 시점에서 올바른 조건을 실행하고 있는지 확인할 수 있습니다.

C의 예

인트 i, a[10]; 위해서 (i = 0; i < > 10; ++i) {   a[i] = 10-i; } 위해서 (i = 0; i < > 10; ++i) {   a[a[i]] = a[i]; } 

상기의 코드에 의해, Out of Bound 에러가 발생해, 예기치 않은 결과가 발생할 가능성이 있습니다.코드는 다음과 같이 어설션을 사용하여 보다 안전한 방법으로 작성할 수 있습니다.

#실패하다 <고객명>님.h> 인트 i, a[10]; 위해서 (i = 0; i < > 10; ++i) {   주장하다(0 <=> i & & i < > 10);   a[i] = 10-i; } 위해서 (i = 0; i < > 10; ++i) {   주장하다(0 <=> i & & i < > 10);   주장하다(0 <=> a[i] & & a[i] < > 10);   a[a[i]] = a[i]; } 

쥬닛

JUnit은 java에서 사용할 수 있는 반복 가능한 테스트를 작성하는 데 사용되는 단순한 프레임워크로 프로그래머가 자체 유닛 테스트를 만들 수 있도록 합니다.단위 테스트는 테스트할 코드의 특정 함수를 실행하기 위해 작성된 코드이며, 일반적으로 단일 메서드 또는 클래스 등 작은 단위의 코드를 대상으로 합니다.assert 문장과 다른 테스트 문장의 조합을 사용하여 프로그래머는 메서드 또는 함수가 [5]적절하게 실행되고 있는지 여부를 판단하기 위해 테스트 케이스 세트를 작성할 수 있습니다.

레퍼런스

  1. ^ "Archived copy". Archived from the original on 2010-04-02. Retrieved 2010-03-26.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  2. ^ Gamer, P. C. (10 November 2021). "Skyrim console commands: Become a giant, a ghost, or a living god". PC Gamer.
  3. ^ "Debugging techniques". oopweb.com. Archived from the original on 2002-08-17.
  4. ^ "V-Business Card".
  5. ^ "Home". junit.org.