문제

일반적으로 할당 후 한 번만 사용되는 변수 값으로 배치됩니다. 나중에 사용되는 한 줄의 값을 호버링 할 수 있으므로 나중에 더 편리하게 디버깅을하기 위해이 작업을 수행합니다.

예를 들어,이 코드는 getFoo ()의 값을 가져갈 수 없습니다.

return GetFoo();

그러나이 코드는 다음과 같습니다.

var foo = GetFoo();
return foo; // your hover-foo is great

이것은 매우 냄새가납니다 야그니-esque,로 기능foo누군가가 가치를 디버깅해야 할 때까지의 과제는 사용되지 않을 수 있습니다. 결코 일어나지 않습니다. 그렇지 않은 경우 단지 예측되었습니다 디버깅 세션, 위의 첫 번째 코드 스 니펫은 코드를 더 간단하게 유지합니다.

단순성과 디버거 사용의 용이성 사이를 가장 잘 손상시키기 위해 코드를 어떻게 작성 하시겠습니까?

도움이 되었습니까?

해결책

다른 디버거에 대해 모르지만 통합 된 Visual Studio Debugger는 "자동"창의 함수에서 반환 된 내용을보고합니다. 반환 명령문을 넘어 서면 반환 값은 반환 된 값의 값으로 [기능 이름]이 반환 된 것으로 나타납니다.

GDB는 동일한 기능도 지원합니다. "Finish"명령은 나머지 현재 함수를 실행하고 리턴 값을 인쇄합니다.

이것은 매우 유용한 기능이기 때문에 대부분의 다른 디버거가 있으면 놀랄 것입니다. 그렇지 않았다 이 기능을 지원합니다.

"디버거 전용 변수"의 일반적인 "문제"는 실제로 디버거 전용입니까? 잘 알려진 임시 변수를 사용하면 코드 가독성을 크게 향상시킬 수 있다고 생각합니다.

다른 팁

또 다른 가능성은 컴파일러가 생성하는 코드를 읽을 수있는 충분한 어셈블리 프로그래밍을 배우는 것입니다. 해당 기술을 사용하면 값이 어디에 있는지 (레지스터, 메모리에서) 어디에 있는지 파악하고 변수에 저장하지 않고도 값을 볼 수 있습니다.

이 기술은 최적화 된 실행 파일을 디버깅 해야하는 경우 매우 유용합니다. Optimizer는 상징적 디버깅이 도움이되지 않도록 작성한 방식과 크게 다른 코드를 생성 할 수 있습니다.

Visual Studio Debugger에서 중간 변수가 필요하지 않은 또 다른 이유는 시계 창과 즉각적인 창에서 기능을 평가할 수 있기 때문입니다. 시계 창의 경우 평가하려는 진술을 강조 표시하고 창으로 드래그하십시오.

나는 그것이 걱정할 가치가 없다고 주장 할 것입니다. 일반적인 경우 런타임 오버 헤드가 없다는 것을 감안할 때 GO NUTS. 복잡한 진술을 여러 간단한 진술로 나누면 일반적으로 가독성이 높아집니다.

나는 과제를 제외시킬 것이다 필요할 때까지. 해당 변수를보고 싶지 않은 코드에 들어 가지 않으면 코드를 불필요하게 혼란스럽게 만들지 않았습니다. 당신이 필요를 가로 질러 달릴 때, 그것을 넣어야합니다 (사소한 일이어야합니다. 변수 추출 리팩토링). 그리고 그 디버깅 세션을 마치면 제거하십시오 (인라인 변수). 당신이 자신이 너무 많이 디버깅을하고 그 특정 시점에서 많은 것을 발견한다면, 당신은 앞뒤로 리팩토링하는 데 지치지 않으면 필요를 피할 수있는 방법에 대해 생각해보십시오. 더 많은 단위 테스트가 도움이 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top