문제

Win32 프로덕션 프로세스의 교착 상태로 인한 명백한 중단을 디버깅하는 단계와 기술은 무엇입니까?WinDbg를 이러한 목적으로 사용할 수 있다고 들었습니다. 그러나 이를 수행할 수 있는 방법에 대한 명확한 힌트를 제공해 주시겠습니까?

도움이 되었습니까?

해결책

이것 우편 다양한 옵션을 시작해야 합니다. 디버깅이라는 태그가 붙은 게시물을 확인하세요..

또 다른 유용한 기사 교착 상태 디버깅..

다른 팁

소스와 메모리 덤프(또는 라이브 디버깅 세션)에 액세스할 수 있다면 실제 교착 상태를 디버깅하는 것은 실제로 쉽습니다.

여러분이 해야 할 일은 스레드를 살펴보고 일종의 공유 리소스를 기다리고 있는 스레드를 찾는 것입니다(예: 대기 중으로 중단됨). WaitForSingleObject).일반적으로 말하면 두 개 이상의 스레드가 서로 잠겼는지 파악한 다음 어느 스레드가 잠금 계층 구조를 깨뜨렸는지 파악하면 됩니다.

어떤 스레드가 잠겨 있는지 쉽게 알 수 없는 경우 다음과 같은 방법을 사용하세요. 이 게시물은 여기 각 스레드의 잠금 체인을 추적합니다.루프에 빠지면 루프에 있는 스레드가 교착 상태에 빠지게 됩니다.

매우 게으른 경우에는 Application Verifier를 설치한 다음 모듈을 추가하고 기본 테스트에서 "잠금"만 선택할 수 있습니다.그런 다음 모든 디버거에서 애플리케이션을 실행할 수 있습니다.
중요한 섹션 교착 상태가 발생하면 즉시 이유를 찾으십시오.

어떤 언어/IDE를 사용하고 있나요?

.Net에서는 애플리케이션의 스레드를 볼 수 있습니다.디버그->Windows->스레드 또는 Ctrl+Alt+H

교착 상태를 디버깅하는 것은 까다로울 수 있습니다.나는 보통 일종의 로깅을 수행하고 로그가 중지되는 위치를 확인합니다.OutputDebugString()을 사용하여 파일에 기록하거나 디버그 콘솔에 기록합니다.

가장 좋은 방법은 로깅 문을 추가하는 것부터 시작하는 것입니다.일반적으로 교착 상태에 있는 공유 리소스에만 권장하지만 일반적으로 이를 추가하면 예상하지 못한 상황이나 코드 영역을 가리킬 수도 있습니다.많이 알려진 stackoverflow.com 데이터베이스 문제는 실제로 log4net으로 밝혀졌습니다!stackoverflow 팀은 결코 log4net을 의심하지 않았으며 (아이러니하게도) 로깅을 조사함으로써만 이를 보여주었습니다.처음에는 WinDgb와 같은 복잡한 도구를 사용하는 것이 매우 직관적이지 않기 때문에 사용하지 않을 것입니다.

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