몇 분 동안 응답하지 않는 응용 프로그램의 스택 추적을 캡처하고 싶습니다.Windbg 침입 시간이 매우 오래 걸림
응용 프로그램이 응답을 멈 추면 Windows 바탕 화면은 이미 실행중인 다른 응용 프로그램이 정상적으로 작동하더라도 마우스 클릭에 대한 응답을 중지합니다 (예 : windbg가 제대로 작동하고 ProcessExplorer가 화면을 새로 고치지 만 마우스에 응답하지 않음 이벤트). 응용 프로그램이 응답하지 않는 동안 실제로 하나의 CPU 코어의 약 80 %를 차지합니다. 그래서 스택 트레이스를 얻고 싶습니다.
는 오작동 응용 프로그램에는 일반적으로 이상한 일을 2 ~ 3 분 정도 소요 또는 Ctrl + Esc를 누르면 즉시 응답하지 (및 시작 메뉴는 물론 열립니다 ...)
나는 WinDbg는 첨부 오작동하는 응용 프로그램과 Break 명령을 실행하면 응용 프로그램이 다시 응답하기 시작할 때까지 침입이 발생하지 않습니다.
침입이 사실은 DbgBreakPoint
을 호출하는 원격 스레드를 실제로 생성한다는 것을 알고 있습니다.
디버거의 스레드가 실행되지 않도록 할 수있는 기능은 무엇입니까?
수정 : 먼저 도움을 주셔서 감사합니다.
나는 또한이 문제가 잘못된 장치 드라이버 나 어딘가에 시스템 전체에 걸려있는 것을 설치하는 것으로 인해 발생할 수 있다고 생각했습니다.
나는 커널 디버깅을 활성화하고 문제가있는 스레드에 대해 커널에서 스택 추적을 얻거나 수동 블루 스크린 트리거가 덤프를 생성하고 나중에 그 패턴을 볼 수 있도록 할 생각을하고있었습니다.
프로세스 탐색기와 프로세스 모니터는 흥미로운 것을 나타내지 않습니다. 또한 버그가 트리거되면 (창을 업데이트하지만 마우스 또는 키보드에 반응하지 않음) 버그를 사용할 수 없게됩니다.
EDIT2
: 배경 정보 : 응용 프로그램은 QT, OpenGL은 또한 DirectSound를 사용 및 Windows 7 SP1 x64의 나는 현재 그래픽 부분에 무언가를 의심하고 실행됩니다.이상한 점은 시스템 전반의 잠금 (GDI 잠금과 같은)을 취하면 다른 Windows의 그리기를 막을 수 있지만 이상한 일은 아닙니다. 동일한 컴퓨터의 WinDbg도 정상적으로 작동합니다. ProcessExplorer는 업데이트하지만 마우스 클릭, 데스크톱 업데이트는받지 만 마우스 클릭은받지 못합니다.
나는 현재 커널 디버거가 붙어있다 ...
EDIT3 ETW는 디버깅을 위해 가장 유용했다. Qt의 메인 이벤트 처리 루프가 미쳐 버렸습니다. PeekMessage 및 MsgWaitForMultipleObjectsEx (0 제한 시간 포함)는 긴밀한 루프에서 호출됩니다. 이것이 바로 높은 CPU 사용량의 출처입니다. 그 때 응용 프로그램이 많은 양의 메시지를 생성/가져 오는 것 같습니다. 그러나 메시지가 무엇인지 (또는 ETW의 함수 매개 변수에 액세스하는 방법을 알지 못하는지) 알기 란 쉽지 않습니다. 디버거를 사용하면 많은 도움이되지 않지만 QT의 이벤트 루프에 중단 점이 있으면 WM_TIMER 메시지가 범인이라고 생각하게됩니다.
Windows 버전 어떤 것을 볼 수 있도록
WAIT (µs) max
을 찾기 위해? 이 버전 또는이 모든 경우에만이 기능을 사용할 수 있습니까? – RbMmWindows 7 sp1 x64, 일부 구성 요소는 Windows 7에서만 인증되므로 다른 버전에서는 테스트하지 않았습니다.이 문제는 쉽게 재현 할 수 없습니다. 2 시간 사용 후 발생할 수 있습니다 (이것은 dodgy 드라이버 이론과 일치합니다). – Jaka
WPA/ETW를 사용해 보셨습니까? – magicandre1981