저는 20 년 이상 C, Perl, SQL, Java, PHP, JavaScript 및 최근 Python으로 프로그래밍 한 소프트웨어 개발자였습니다. 신중하게 생각하고 잘 배치 된 디버깅 print
문을 사용하여 디버깅 할 수없는 문제가 없었습니다 .
많은 사람들이 내 기술이 원시적이라고 말하고 IDE에서 실제 디버거를 사용하는 것이 훨씬 좋습니다. 그러나 내 관찰에 따르면 IDE 사용자는 돌 나이프와 베어 스킨을 사용하여 내가 할 수있는 것보다 더 빠르거나 더 성공적으로 디버깅하지 않는 것으로 보입니다. 올바른 도구를 배우는 데 진심으로 열려 있지만 시각적 디버거를 사용하는 데있어 매력적인 이점을 보여주지 못했습니다.
또한 중단 점을 설정하고 변수의 내용을 표시하는 방법의 기초를 넘어 IDE를 사용하여 효과적으로 디버깅하는 방법을 보여주는 자습서 나 책을 읽지 않았습니다.
내가 무엇을 놓치고 있습니까? 진단 디버깅을 신중하게 사용하는 것보다 IDE 디버깅 도구가 훨씬 더 효과적인 이유는 무엇입니까 print
?
IDE 디버깅의 더 훌륭한 기술을 보여주는 자료 (자습서, 서적, 스크린 캐스트)를 제안 할 수 있습니까?
달콤한 답변! 시간을 내 주셔서 감사합니다. 매우 밝습니다. 나는 많은 투표를했고 아무도 투표하지 않았다.
몇 가지 주목할만한 점 :
- 디버거를 사용하면 변수, 코드 또는 런타임 환경의 다른 측면을 임시로 검사하거나 변경하는 데 도움이 될 수 있지만 수동 디버깅을 위해서는 응용 프로그램을 중지, 편집 및 다시 실행해야합니다 (재 컴파일 필요).
- 디버거는 실행중인 프로세스에 연결하거나 크래시 덤프를 사용할 수 있지만 수동 디버깅에서는 결함을 “복제하는 단계”가 필요합니다.
- 디버거는 복잡한 데이터 구조, 다중 스레드 환경 또는 전체 런타임 스택을 쉽고 읽기 쉬운 방식으로 표시 할 수 있습니다.
- 디버거는 거의 모든 디버깅 작업을 수행하기 위해 시간과 반복 작업을 줄일 수있는 여러 가지 방법을 제공합니다.
- 비주얼 디버거와 콘솔 디버거는 모두 유용하며 많은 기능이 공통적입니다.
- 또한 IDE에 통합 된 시각적 디버거를 사용하면 단일 통합 개발 환경 (따라서 이름)에서 스마트 편집 및 IDE의 다른 모든 기능에 편리하게 액세스 할 수 있습니다.
답변
IDE 디버거가 코드에서 추적 메시지를 제공 할 수있는 일부 기능의 예 :
- 보기 호출 스택을 당신에게 당신의 현재 스택 프레임에 대한 컨텍스트를 제공, 어느 시점에서.
- 추적을 추가하기 위해 다시 컴파일 할 수없는 라이브러리로 들어가 십시오 (디버그 기호에 액세스 할 수 있다고 가정).
- 프로그램이 실행되는 동안 변수 값 변경
- 편집 및 계속- 코드 실행 중에 코드 를 변경 하고 변경 결과를 즉시 확인할 수있는 기능
- 변수가 바뀌는시기 를 보고 변수 를 볼 수 있어야합니다
- 코드 의 기능을 확인하려면 코드 섹션 을 건너 뛰거나 반복 할 수 있습니다. 이를 통해 이론적 변경을 테스트하기 전에 테스트 할 수 있습니다.
- 메모리 내용 을 실시간으로 검사
- 응용 프로그램에서 예외 를 처리하더라도 특정 예외 가 발생 하면 경고합니다 .
- 조건부 중단 점 ; 스택과 변수를 분석 할 수 있도록 예외적 인 상황에서만 응용 프로그램을 중지합니다.
- 뷰 스레드 컨텍스트 (다른 스레드로부터 트레이스가 출력 인터리브되는 바와 같이) 추적을 달성하기 어려울 수있는 멀티 스레드 애플리케이션에서를.
요약하면, print 문은 (일반적으로) 정적 이며 원래 명령문이 충분하지 않은 경우 추가 정보를 얻으려면 다시 컴파일해야합니다. IDE는 이러한 정적 장벽을 제거 하여 손끝에서 다이나믹 한 툴킷을 제공합니다.
처음 코딩을 시작했을 때 디버거와 관련하여 큰 문제가 무엇인지 이해할 수 없었으며 추적 (UNIX에 있었고 디버거는 GDB)으로 무엇이든 얻을 수 있다고 생각했습니다. 그러나 그래픽 디버거를 올바르게 사용하는 방법을 배우면 인쇄 문으로 돌아가고 싶지 않습니다.
답변
-
IDE 디버거를 사용하면 런타임에 변수 값을 변경할 수 있습니다.
-
IDE 디버거를 사용하면 실행이 시작될 때보고 싶지 않은 변수의 값을 볼 수 있습니다.
-
IDE 디버거를 사용하면 호출 스택을보고 이상한 값을 전달한 함수의 상태를 검사 할 수 있습니다. (이 기능은 수백 곳에서 호출된다고 생각하십시오.이 이상한 값이 어디에서 오는지 모릅니다)
-
IDE 디버거를 사용하면 줄 번호가 아닌 조건에 따라 코드의 어느 시점에서나 조건부로 실행을 중단 할 수 있습니다.
-
IDE 디버거를 사용하면 처리하지 않고 예외 처리되지 않은 경우 프로그램 상태를 확인할 수 있습니다.
답변
고객이 메모리 덤프를 가져 와서 “프로그램이 다운되면 왜 그런지 말해 줄 수 있습니까?”
답변
- 코드 전체를 통한 인쇄 문은 가독성을 떨어 뜨립니다.
- 디버그 목적으로 만 추가 및 제거하는 데 시간이 많이 걸립니다
- 디버거는 호출 스택을 추적하여 현재 위치를 쉽게 확인할 수 있습니다.
- 변수는 즉시 수정 될 수 있습니다
- 진단을 돕기 위해 실행 일시 정지 중에 임시 명령을 실행할 수 있습니다.
- print 문과 함께 INCONJUNCTION과 함께 사용할 수 있습니다. Debug.Write ( “…”)
답변
print 문을 사용하여 디버깅하는 것은 잃어버린 예술이며 모든 개발자가 배우는 것이 매우 중요합니다. 그렇게하는 방법을 알고 나면 IDE를 통하는 것보다 특정 방식으로 버그를 디버깅하는 것이 훨씬 쉬워집니다. 이 기술을 알고있는 프로그래머도 논박 할 목적으로 로그 메시지 (실제로 로그를 읽지 않을 것입니다)에 넣을 유용한 정보가 무엇인지 잘 알고 있습니다.
즉, 다른 종류의 버그에 대해서는 훨씬 더 쉽기 때문에 단계별 디버거를 사용하는 방법을 알아야합니다. 나는 이유를 설명하기 위해 이미 게시 된 다른 훌륭한 답변에 맡길 것입니다 🙂
답변
내 머리 꼭대기에서 :
- 복잡한 객체 디버깅 -디버거를 사용하면 객체의 내부를 깊이 파고들 수 있습니다. 객체에 복잡한 객체 배열이있는 경우 print 문은 지금까지만 얻을 수 있습니다.
- 과거 코드를 단계별로 실행하는 기능 -디버거를 사용하면 실행하지 않으려는 과거 코드를 건너 뛸 수 있습니다. 사실, 수동으로도 할 수 있지만 주입해야 할 코드가 훨씬 많습니다.