디버거 사용을 피하면 어떤 이점이 있습니까?


101

경력을 쌓은 동안 일부 개발자는 디버깅 도구를 사용하지 않지만 문제가 무엇인지 파악하기 위해 잘못된 코드를 검사합니다.

디버거없이 코드에서 빠르게 오류를 찾을 수있는 것은 좋은 기술이지만, 디버거가 오타와 같은 작은 실수를 쉽게 찾을 수있을 때 문제를 찾는 데 많은 시간을 소비하는 것이 비생산적인 것 같습니다.

디버거없이 컴플렉스를 관리 할 수 ​​있습니까? 바람직합니까? " 심령 디버깅 "을 사용하면 어떤 이점이 있습니까?


19
안녕 조나단, 난리가 갇히는 것을 피하고 질문을 계속 열어 놓기 위해 질문을 수정했습니다.

예 : 코드를 고려하십시오 a = 6/3. 대신 오타를 입력했습니다 a = 6/2. 이제 니모닉 수준에서 ADD, JMP 명령어를 검색하고 2 대신에 하나의 반복이 있음을 발견했습니다. 오타가 잘못되었습니다. 이제 항상 디버거를 사용하는 것이 얼마나 터무니 없는지 알 수 있습니다.
EAGER_STUDENT

답변:


153

외부에서 추측하는 것처럼 보이는 것이 종종 "마음으로 논쟁하는 것"으로 밝혀졌습니다. 어떤면에서 이것은 체스 판을 보지 않고 체스를하는 그랜드 마스터의 능력과 유사합니다.

그것은이다 지금까지 이 전혀 디버거를 필요로하지 않기 때문에, 내가 알고있는 가장 효율적인 디버깅 기법. 뇌는 여러 코드 경로를 동시에 탐색하여 디버거를 사용할 때보 다 더 나은 처리 시간을 제공합니다.

디버거를 사용하는 것이 소중한 시간을 잃는 것을 의미하는 경쟁 프로그래밍 의 세계로 잠깐 들어가기 전에이 기술에 대해 의식하지 않았습니다 . 약 1 년의 경쟁 끝에, 나는이 기술을 거의 독점적으로 초기 방어선으로 사용하기 시작했고, 디버그 로깅이 이어졌으며, 실제 디버거를 사용하여 먼 3 위를 차지했습니다. 이 연습의 유용한 부작용 중 하나는 새로운 코드를 작성할 때 "마음에 빠지는 것"이 ​​멈추지 않기 때문에 느린 속도로 새로운 버그를 추가하기 시작했다는 것입니다.

물론이 방법은 코드를 통해 여러 경로를 시각화하는 데있어 마음의 한계로 인해 한계가 있습니다. 고급 알고리즘에서 버그를 수정하기 위해 디버거를 사용하면서 마음의 이러한 한계를 존중하는 법을 배웠습니다.


27
+1 "프로그래밍에 의한 프로그래밍"이로드 된 구라는 것을 알았습니다. 사고에 대한 대안은 없습니다. OP가 설명하지 않은 것은 "추측"이 얼마나 효과적인지입니다. 내 의심은 그것이 순수한 추측 (즉 벽 접근에 스파게티)이지만 오히려 연역적 추론을 사용한다는 것입니다. 디버거는 자신의 자리를 차지하지만 연역적 추론과 단순히 코드를 이해하는 만병 통치약은 아닙니다.
Bill

8
@DJClayworth 그것은 완전히 정확하지는 않습니다 : 때로는 디버거를 사용하는 것은 좋은 디버거를 가지고 있어도 좋지 않은 선택입니다. 많은 것을 성취하지 않고 많은 시간을 낭비하게됩니다. 즉시 내 마음에 오는 한 가지 경우는 동시성 문제를 해결하는 것입니다. 다른 하나는 높은 분기 요소, 일부 동적 프로그래밍 알고리즘 및 하드웨어 인터럽트 서비스 루틴을 사용하여 재귀 알고리즘을 디버깅합니다. 물론 실제로 필요할 때 디버거를 사용하지 않는 것은 어리석은 일이지만 디버거가 필요할 때 결정하는 것은 매우 개인적인 선택입니다.
dasblinkenlight

9
+1 특정 유형의 버그 (특히 복잡한 알고리즘에서)에 귀중한 디버거를 발견하지만 실제로 코드를 잘 이해하는 것에 대한 대체물은 없습니다
Chris Browne

7
@DJClayworth 나는 의도적으로 디버거를 사용하지 않는 경우가 더 좋은 것보다 더 강력한 진술을했다. 경쟁적인 프로그래밍과의 짧은 만남은 디버거에 본능적으로 도달하는 것이 나에게 가장 효율적인 행동은 아니라고 가르쳤다 . 요즘 나는 (1) 코드를 빠르게 다시 읽고, (2) 디버거를 가기 전에 (3) 디버그 추적을 검사합니다 (사용 가능한 경우). 많은 경우에, 단계 (1) 또는 (2)에서 문제를 발견하고 디버거를 사용하지 않고 문제를 재현하는 단위 테스트를 작성하고 수정 사항을 코딩하기 때문에 세 번째 단계는 불필요합니다.
dasblinkenlight

10
당신이 정말로 의미하는 것은 프로그래머가 마법의 "찾기 버그"버튼을 클릭하는 대신 디버깅 시퀀스를 가져야한다는 것 입니다. 디버거는 매우 강력한 도구이지만 전기 톱을 발사하여 울타리를 다듬지 않습니다.
스펜서 Rathbun

41

코드베이스를 알수록 디버거가 덜 필요합니다 (그러나 여전히보고 된 오류를 확인하면 추론의 중요한 단서입니다).

중소 규모의 역동적 인 동작을 이해하는 훌륭한 도구이지만 더 큰 그림 대신 세부 사항에 초점을 맞추는 경우가 많습니다. 그리고 얼마 지나지 않아 문제가 발생합니다. 넓은 범위의 상호 작용에서 다른 도구 (예 : 모듈 경계에서의 입력 및 출력 로깅)를 통해 동적 동작을보다 쉽게 ​​이해할 수있는 경향이 있습니다.


35

그들은 나쁜 프로그래머는 아니지만 아마도 비효율적 인 문제 해결사 일 것입니다.

디버깅 의 조언을 따르는 경향이 있습니다 . 가장 어려운 소프트웨어 및 하드웨어 문제 (David Agans) 를 찾기위한 9 가지 필수 규칙이며,이 규칙 은 "종료 한 생각과보기"의 지침에 속합니다.


12
동의하지는 않지만 동의하지는 않습니다. 델난이 말했듯이 코드가 수행하는 작업을 이해할 있으면 디버거를 단계별로 실행하고 오류가 발생하는 시점을 찾는 것보다 잘못된 작업을 파악하는 것이 더 빠를 있습니다. 즉, 코드를 읽을 때 문제를 식별 할 수 없을 때 디버거 사용을 거부하는 개발자 는 큰 실수를합니다.

@Mark와 함께 문제를 잘못 진단하고 새로운 결함을 일으키는 추가 보너스.
Keith는

11
@ Mark Bannister-나는 당신이 말하는 것을 봅니다. 15 분 이상 코드에서 문제를 찾은 경우 디버거를 포기하고 사용하며 완고하지 않도록 수정하겠습니다.
JohnFx

9
좋은 프로그래머는 디버거에 의존 해서는 안된다고 생각합니다 . 통찰력이 실패한 후 또는 주기적으로 통찰력이 계속 제대로 유지되도록하기 위해 즉시 사용 가능한 경우 (사용 가능한 경우)이를 사용해서는 안됩니다.
comingstorm

1
@mark 매우 작은 코드 기반으로 작업하지 않는 한 모든 코드 줄을 이해하는 것이 불가능하다고 생각합니다. 현재의 버그 중 95 %가 설명 된 방식으로 해결되지만 더 까다로운 버그는 디버거가 필요한 곳입니다.
wobbily_col

31

모든 작업에는 올바른 도구를 올바르게 사용해야합니다. 디버거가 있으면 실제로 어떤 일이 일어나고 있는지 확인하십시오. 대부분의 버그는 가정에 의해 발생합니다.

나는 더 잘 알고 있기 때문에 디버거 사용을 거부하는 개발자와 협력했습니다. 한 번 얻은 고전적인 반응은 '충돌은 나에 의한 것이 아니고 하루 종일 코드를 검사하는 데 [충돌이 발생한 곳]에 아무런 문제가 없었습니다.'였습니다. (DB에서 읽은 null 값은 어떻습니까?) 상사는 훌륭한 답변이라고 생각했지만 고객은 그렇지 않았습니다.

나는 최대한 빨리 그 팀을 내렸다. 그들의 목적은 일을 묶고 하루 종일 바쁜 문제로 간단한 10 분 문제를 만드는 것이 었습니다.


18
+1 "가장 큰 버그는 가정에 의한 것"은 매우 현명한 단어입니다.
ZJR

15
모든 버그는 가정에 의한 것이라고 가정합니다. (내가 무엇을했는지 보시겠습니까? = P)
dan_waterworth

4
@ ZJR : 그게 assert너무 좋은 이유 입니다. 가정을 확인하십시오. 자주 확인하십시오.
Zan Lynx

@dan_waterworth : 사실이 아닙니다. 하나는 오타 일 수 있습니다.
Thomas Eding

13

디버깅 실습에 대한 가장 좋은 안내서는 Steve McConnel의 Book Code Complete 입니다. 23 장에서는 디버깅에 대해 자세히 설명하고 몇 가지 점을 설명하겠습니다.

  1. 문제를 이해하는 것이 중요하며 디버거를 사용하는 것이 문제를 대체하지 않습니다.
  2. 추측은 디버깅에 대한 나쁜 접근 방식입니다. 동료들이 문제에 대해 생각하기보다는 추측을 실제로 사용하고 있다면 나쁜 일을하고있는 것입니다. 추측은 코드에 임의의 인쇄 문장을 고수하고 유용한 것을 찾기를 희망합니다.
  3. 동료가 디버거를 사용하는 방법을 모르는 경우 (사용하지 않기로 결정하지 않고) 예, 사용하는 언어의 구문을 모르는 사람과 마찬가지로 무능합니다.

2
귀하의 게시물 대부분에 대해 귀하의 의견에 동의하지만 무능한 사람은 불공평하다고 생각합니다. 디버거를 사용하지 않고 개발할 수 있으며 비효율적입니다. 어떤 사람들은 다른 사람들보다 디버거에 대해 배웁니다!
ChrisFletcher

나는 "무능한"과 같은 단어를 우연히 던지지 않을 것입니다. 나는 인쇄 문장으로 완전히 디버깅하는 사람을 알고 있으며, 그가 기여한 사람은 아무도 없습니다.
Mike Dunlavey

2
@MikeDunlavey 그 사람 은 디버거를 사용하는 방법을 알고 그것을 사용하지 않기로 선택합니까? 좋아. 그들이 모른다면, 나는 내 진술을 기다립니다.
DJClayworth

2
당신이 원하는대로, 그 형용사가 당신에게 적용될 수있을 때 쉽게 올 수 있습니다. 그럼 당신은 이해할 것입니다-그것은 학교 운동장입니다.
Mike Dunlavey

9

말하기 어렵다. 버그가 무엇인지에 대해 이미 알고있는 경우 추측으로 디버깅 할 수 있습니다 (잘못된 값이 라이브러리 함수에 전달됨, 유효하지 않은 SQL 등). "문자 버퍼가 너무 작습니다"와 같이 오류 자체가 작거나 명백해 보일 때 가끔 그렇게합니다. 스택 추적에 실패한 행이 표시되고이 오류를 해결하기 위해 디버거가 필요하지 않습니다.

항상 이렇게하는 것은 비생산적 일 수 있으며 처음 몇 개의 "추측"이 실패하면 추측은 잘못된 문제 해결 전략이며 실제 디버거가 호출되어야합니다. 일반적으로 디버거를 사용하는 데 아무런 문제가 없다고 말할 수 있습니다. .

즉, 디버거가 제대로 작동하기가 너무 어려웠거나 최소화하고 쓸모없는 도구 및 환경을 사용하여 추측하는 것이 불행히도 종종 더 나은 접근법이었습니다. 적절한 디버거가없는 독점 도구로 작업했습니다. 그러한 환경에서 너무 오래 일한 사람은 결국 디버거에 대한 신뢰를 잃고 추측 접근 방식에 의존 할 가능성이 있다고 생각합니다.


8

이 주제에 대한 토론에서 "단위 테스트"를 언급하지 않은 것에 놀랐습니다.

테스트 중심 개발을 수행하기 때문에 디버거에서 많은 시간을 소비하지 않습니다. 10 년 전, 나는 디버거를 꼼꼼히 살펴 보았습니다.

  1. 코드 조각을 작성한 후 작동하는지 확인하고
  2. 문제 진단을 위해 버그 보고서를 받았을 때

10 년 동안 테스트 중심 개발을 통해 알게 된 것은 다음과 같은 경우 프로그래머로서 훨씬 더 생산적이라는 것입니다.

  1. 코드를 작성 하기 전에 단위 테스트 작성하여 올바르게 작성했는지 확인합니다.
  2. 버그 보고서를 받으면 즉시 단위 테스트를 작성하여 문제를 복제하고 드릴 다운합니다.

컴퓨터가 코드를 실행하고 결과를 검증하는 것은 코드를 생각하거나 단계별로 수행하여 결과를 정신적으로 검증하는 것보다 수천 배 빠르며 실수하지 않습니다.

나는 여전히 디버거에서 가끔씩 단계를 거쳐야하며 여전히 코드를 정신적으로 분석하는 데 종사하고 있지만 거의 드물고 거의 까다로운 코드입니다.


+1 print 문을 추가하고 테스트를 다시 실행 한 다음 디버거를 사용하는 것이 더 빠릅니다.
Winston Ewert

@ winston-문제가있는 코드의 위치를 ​​찾을 때까지 여러 print 문을 작성하는 것보다 디버거를 시작하는 것이 더 빠릅니다. 모든 것이 다릅니다. 간단한 문제는 일반적으로 설명하는 방식으로 더 빨리 해결되지만 복잡한 문제는 디버거가 필요한 곳입니다. 두 가지를 모두 사용할 수 있다는 것은 절대적인 원칙을 엄격하게 준수하는 것보다 낫습니다.
wobbily_col

7

개인적으로 다음과 같이 디버거 사용을 최소화하려고합니다.

  • 코드를 분석하여 가능한 버그 원인을 암시 하는 정적 검사기 및 유사한 컴파일러 옵션 사용
  • 가능한 가장 기능적인 스타일로 가능한 적은 부작용 으로 코드 작성 , 가능한 경우 변경 가능한 상태 제거
  • 최소한의 합리적인 입도로 단위 테스트 작성
  • 예외를 삼키지 않는

물론 모든 사람이 오류를 내기 때문에 이런 방식으로 프로그램을 작성하더라도 테스트가 실패하면 디버거를 사용하여 중간 식의 값을 검사합니다. 그러나 위의 원칙을 준수함으로써 결함을 쉽게 찾을 수 있으며 디버깅이 고통스럽고 결정적이지 않은 프로세스를 의미하지는 않습니다.


6

가능할 때마다 디버거를 사용하십시오. 디버거는 단순히 문제를 해결하거나 (이 값을 확인하지 않았습니다) 관련 코드를 분석 할 때 유용한 많은 컨텍스트를 제공합니다 (와우, 스택이 완전히 엉망입니다. 버퍼 오버플로 문제입니다).


5

디버깅은 런타임에 코드의 객체 및 변수 상태를 검사하는 데 매우 유용한 도구입니다.

위의 답변에서 앞에서 언급했듯이 디버깅은 매우 유용하지만 제한적인 경우가 있습니다.

내 경험상 디버거를 사용하면 코드 상태에 대한 잘못된 가정을 밝히는 데 도움이되므로 매우 유용합니다. 어떤 사람들은 버그를 찾기 위해 코드를 읽는 것에 익숙하지 않으므로 디버깅은 사용자 또는 다른 개발자가 코드 상태에 대해 잘못된 가정을 밝히는 데 도움이 될 수 있습니다.

메소드에 전달 될 때 매개 변수가 널이되지 않을 것으로 예상 할 수 있으므로 해당 케이스를 확인하지 않고 해당 매개 변수가 널이 아닌 것처럼 메소드를 계속 수행하지 마십시오. 실제로는 매개 변수 null이 아니어야한다는 메서드의 전제 조건으로 설정하더라도 매개 변수 어느 시점에서 null이됩니다. 항상 일어날 것입니다.

앞에서 언급 한 예제에서 디버거의 유용성과는 달리, 멀티 스레딩 (즉, 동시성, 비동기 처리)이 포함되는 경우 사용하기 어렵고 다소 유용하지 않습니다. 도움이 될 수 있지만 디버거의 중단 점이 지점 A의 한 스레드에서 지점 B의 완전히 분리 된 스레드에 도달하면 멀티 스레드 포그에서 방향을 잃기 쉽습니다. 개발자는 새로운 중단 점 " 생각 과정 "을 그의 두뇌의"스택 "위에 놓고 새로운 중단 점의 시점에서 코드에 자신을 향하게합니다. 중단 점 B의 관련성이 감소한 후 개발자는 첫 번째 중단 점으로 다시 전환하여 중단 점 B가 트리거되기 전에 자신이 찾고 있던 것을 기억해야합니다. 혼란스러운 설명 일 수 있음을 알고 있습니다.

또한 동시 코드의 예측 불가능 성은 개발자가 동시 코드를 디버깅하는 데 방해가 될 수 있습니다.

결론적으로, 나의 솔직한 의견으로는 :

  • 동시성 사용시 디버깅 = "디버깅 사고 패턴"의 초점을 잃는 경향 증가

  • 언제든 = 디버깅 생산성 향상 b / c는 경쟁 조건으로 인해 예기치 않은 중단 점으로 인해주의가 중단되지 않습니다.

2
기존 디버거의 유용성이 종종 거의 제로에 가까운 동시 환경에서 디버깅 문제를 제기하면 +1입니다.
dasblinkenlight

4

나는 그들이 너무 하드 코어 생각합니다. 개인적으로 버그가 발생하면 코드를 다시 확인하고 프로그램 논리에서 내 코드를 추적하려고 시도합니다. 때로는 디버깅 도구를 사용하고 버그가 나타나는 곳에서 버그를 수정하는 것보다 다른 문제 나 부작용을 쉽게 발견 할 수 있기 때문입니다. .

내가 못을 박았다고 생각하더라도, 나는 내가 옳은지 확인하기 위해 보통 그것을 디버깅합니다. 문제가 조금 더 복잡하면 디버깅이 절대적으로 필요하다고 생각합니다.

또한 ... 내 의견이지만 현대 IDE가 테이블에 가져올 수있는 도구를 적절하게 활용하지 않았다는 변명의 여지가 없습니다. 보다 빠르고 안정적인 방식으로 작업을 완료하는 데 도움이되는 경우 사용해야합니다.


4

일반화하기는 싫지만, 내가 만난 많은 프로그래머들은 문제를 해결하는 유일한 방법이 있다고 생각합니다 (그들의 방법). 가능한 모든 테스트가 생각되었다고 가정하는 것은 쉽습니다. 다른 관점은 매우 귀중 할 수 있습니다.

시행 착오에 의한 프로그래밍은 몇 가지 훌륭한 새로운 접근 방식을 제시하고 다른 사람들이 놓친 것을 포착 할 수 있습니다.

단점은 일반적으로 훨씬 오래 걸립니다.


4

음, 그것은 사람에 달려 있습니다. 개인적으로, 나는 그렇게 많은 디버거를 사용하지 않습니다. 마이크로 컨트롤러를 프로그래밍 할 때는 기본적으로 LED를 사용하거나 EEPROM에 데이터를 기록하여 코드를 "디버그"합니다. JTAG를 사용하지 않습니다.

PC 나 서버용 소프트웨어를 프로그래밍 할 때 로깅과 많은 콘솔 출력을 사용하는 경향이 있습니다. C 스타일 언어의 경우 전 처리기 지시문을 사용하고 Java에서는 로그 수준을 사용했습니다.

디버거를 사용하지 않기 때문에 내가 잘못하고 있다고 말할 수 있습니까? 구문 오류가있는 위치를 표시하는 것은 편집자 작업이며 논리적 오류가있는 경우 테스트를 실행하면됩니다.


4

디버거를 사용할 필요가없고 디버거를 사용하는 방법을 알지 못하는 것에는 차이가 있습니다. 디버거는 버그 추적 및 수정에 사용되는 많은 도구 중 하나 일뿐입니다. 나는 머리에서 그것을 엉망으로 만들 수있는 개발자와 그들이 할 수 있다고 생각하는 다른 사람들과 함께 일했습니다.

가장 좋은 조합은 코드를 작성하여 단위 테스트를 통해 쉽게 테스트하고 오류를 기록하는 것입니다. 그런 다음 로그를 보거나 디버거를 사용할 필요가 없기를 바랍니다. 그것은 보험을 사는 것과 같습니다. 이 코드를 사용할 필요는 없지만 코드를 다시 확인하여 해결할 수없는 버그가 발생하면 적절한 오류 처리 / 로깅, 단위 테스트를 추가하거나 디버거 사용 방법을 배우기에는 너무 늦습니다.

다른 도구 / 플랫폼은 다른 디버깅 기술 (디버거, 로깅, 단위 테스트 등)을 선호합니다. 개발자가 코드를 다시 확인하는 것 외에도 플랫폼 / 툴에 대한 몇 가지 기술에 익숙하다면 숙련 된 개발자이지만 디버깅과 관련하여 한 가지 트릭 만있는 경우 결국 버그를 찾아서 수정할 수 없습니다.


4

많은 답변이지만 Heisenbug에 대한 언급은 없습니까?!?!

Heisenbugs는 출력 명령문 삽입 또는 디버거에서 실행과 같은 프로그램 디버그 시도가 일반적으로 코드를 수정하고 변수의 메모리 주소와 실행 타이밍을 변경하기 때문에 발생합니다.

나는 최악의 경우 (찾기 어려운 버그의 경우)에만 디버거를 사용합니다. 또한 많은 저명한 개발자 / 테스터가 이야기 한 모범 사례에 따라 코드를 철저히 테스트하는 것이 좋습니다. 이렇게하면 대부분의 문제를 해결할 수 있으므로 디버거를 사용할 필요가 없습니다.


3

최근에 디버거 디버깅에 대한 인수를 읽었습니다 (또는 StackOverflow입니까?). 코드에 대한 테스트 사례가 있어야합니다. 테스트가 통과되면 디버깅으로 인해 버그가 발생하지 않을 수 있습니다 (가정 : 테스트 데이터와 유사한 데이터로 디버깅합니다).

반면에 로깅은 필수입니다. 테스트를 통과하고 프로덕션에 배포하면 버그가있는 것을 알 수 있습니다. 버그의 증거는 과거에 일어난 일에서 비롯된 것입니다. 즉, 누군가가 "어떻게 들어갔습니까?" 좋은 로그가 없으면 원인을 찾을 수 없습니다. 실제로 버그가 발생한 데이터의 모양을 모르기 때문에 디버거조차도 그 시점에서 사용되지 않을 수 있습니다. 로그에서 응용 프로그램을 디버깅 할 수 있어야합니다.

불행히도, 나는 약간의 역설을 내고 있으며 원래의 논란을 불쾌하게 할 수 있습니다. 특히 "개발 시간을 지원하는 데 중요한 디버깅 도우미가 있습니다"라는 위치는 디버거의 중요성과 직교 할 수 있습니다. 그러나 버그를 찾는 데 디버깅을 유용하게 만드는 구성에서 시스템 상태를 설정하는 데 어려움이 있다는 점에 대해 생각해야 할 부분이 있습니다.


3

좋은 단위 테스트와 역 추적을 제공하는 예외로 인해 디버거를 거의 사용할 필요가 없습니다.

내가 디버깅을 사용한 마지막 시간은 일부 레거시 응용 프로그램에서 핵심 파일을 얻었을 때입니다.

내가 "debbuger minion"입니까 아니면이 사람들이 "너무 하드 코어"입니까?

둘 다. 그들은 삶을 더 힘들게 만들고 싶어하는 사람들입니다.


2

디버깅은 훌륭한 개발자가 능숙하게 사용해야하는 도구 일뿐입니다.

코드베이스를 알고 있다면 버그가 어디에 있는지 알 수 있습니다. 그러나 코드를 살펴보면 성가신 버그를 찾기 위해 하루 종일 일주일을 잃을 수도 있습니다.

콘솔에 값을 덤프하는 경우에도 디버깅이없는 동적 유형 언어에서는 추측이 불가능한 경우가 있습니다.

따라서 귀하의 질문에 대답하십시오-그들은 훌륭한 프로그래머 일지 모르지만 사냥 버그가 나쁜 경우 문제 해결 기술과 숙련도입니다.


2

문제의 범위에 따라 다릅니다. 프로그램이 작고 사물이 잘 나뉘어져 있다면 아마도보고하여 알아낼 수 있습니다. 이 프로그램이 몇 년 동안 100 명 이상의 사람들이 개발 한 450 만 라인의 코드라면 특정 버그를 발견 할 수 없습니다.

상기 프로그램 (C)에서 문제가 된 것은 메모리 덮어 쓰기였다. 메모리 중단 점이있는 디버거는 버그가 나타나는 즉시 문제가되는 코드 줄을 식별했습니다. 그러나이 경우 누군가가 4.5 백만 줄의 코드를 모두 읽고 유지할 수있는 방법이 없기 때문에 누군가가 배열을 통해 쓴 한 지점을 식별 할 수 있습니다 (또한 프로그램의 상태에 대한 메모리의 런타임 레이아웃을 알고 있어야합니다) 해당 지점에 도달하기 위해 장시간의 입력으로 약 10 분).

요점 : 작은 프로그램이나 고도로 모듈화 된 것에서는 디버거를 사용하지 않아도됩니다. 프로그램이 실제로 크고 복잡하면 디버거가 많은 시간을 절약 할 수 있습니다. 다른 사람들이 말했듯이 도구는 도구이며 다른 방법보다 뛰어나고 다른 방법이 최선의 선택이 아닌 상황이 있습니다.


0

클라이언트 컴퓨터 또는 환경이 사용자 컴퓨터와 크게 다른 컴퓨터에서 버그가 발생하면 디버거 / 원격 디버거를 설정하는 것이 번거 롭습니다. 따라서 필드에서 버그를 얻는 추운 날에는 '그러나 ... 디버거가 없습니다'라는 응답이 도움이되지 않습니다. 따라서 코드 및 로그 파일에 대한 이해를 통해 문제 해결 기술 세트를 개발하고 버그를 찾아야합니다.


-1

말도 안되는 말 : "실제 프로그래머에게는 디버거가 필요하지 않습니다." 실제 프로그래머에게는 IDE가 필요하지 않으며 노트 패드와 둔한 연필 만 있으면됩니다. 디버거는 생산성을 높이는 다른 도구와 같은 도구입니다.

또한, 디버깅 코드 작업을하는 모든 사람이 해당 코드에 익숙하지는 않다는 것을 고려하십시오. 많은 시간 계약자들은 일어나고있는 일에 대한 이상적인 이상이있는 환경에 들어옵니다. 환경에 대한 자세한 설명이나 20 년 된 스키마 맵과 비전 명명 규칙에 대한 지침을 제공 할 수도 있습니다 (F1, F2 및 F3 필드가있는 테이블 X1234와 테이블 X4312의 차이점을 이해하십시오). 존재]] 당신이 새로운 때),하지만 여러 번 그 설명이 잘못되었습니다; 그렇지 않으면 왜 "미스터리"오류가 발생합니까?

환경을 처음 접하는 사람은 몇 시간 또는 며칠 동안 문제가있는 영역에 대해 큰 데이터베이스를 매핑하고 "알고"해결할 수 있으며 다시 볼 필요가 없습니다. 이것은 엄청난 시간과 돈 낭비입니다. 디버거에 액세스 할 수있는 경우 발생하는 상황을 확인하고 수정 한 후 몇 분 안에 사라집니다. 이 "모든 디버거가 필요하지 않습니다"hooey는 단지 엘리트주의적인 퍼피입니다.


2
밀짚 남자 rant는 질문에 대답하지 않습니다. "진짜 프로그래머는 디버거가 필요하지 않습니다"라는 문장이 없습니다
gnat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.