WinDbg와 VS (Visual Studio) 디버거를 사용하는 이유는 무엇입니까?
WinDbg 와 Visual Studio 디버거 를 사용하는 주요 이유는 무엇입니까 ?
그리고 일반적으로 Visual Studio 디버거를 완전히 대체하거나 필요할 때 더 많이 사용됩니다.
Visual Studio에서 windbg를 사용해야하는 이유가 궁금하다면 Advanced Windows Debugging 을 읽어야 합니다 . 정말 추한 문제를 디버깅해야 할 때마다 windbg는 Visual Studio보다 더 나은 기술을 가지고 있습니다. Windbg는 더 강력한 스크립팅 언어를 가지고 있으며 DLL을 작성하여 어려운 문제를 자동화 할 수 있습니다. gflags.exe를 설치하여 메모리 덮어 쓰기 디버깅을 위해 힙을 더 잘 제어 할 수 있습니다.
실제로 설치를 실행할 필요는 없습니다. 파일을 복사하여 바로 사용할 수 있습니다. 또한 adsplus.vb를 설치하므로 실행중인 프로세스의 미니 덤프를 가져올 수 있습니다. 원격 디버깅을 수행하도록 설정하는 것도 매우 쉽습니다. 테스트 PC에서 깜박이는 15 형 모니터와 싸우는 대신 자신의 책상에서 문제를 디버깅 할 수있는 것보다 더 좋은 것은 없습니다.
일상적인 코드 작성을 위해 저는 Visual Studio를 사용하지만 다른 컴퓨터에서 문제를 디버깅하거나 매우 추악한 상황에 처하게되면 windbg가 유일한 방법입니다. windbg를 배우는 데 시간을 보내는 것은 큰 투자입니다. 또한 크래시 덤프를 살펴보면 windbg를 사용하여 모든 디버깅을 수행하는 http://www.dumpanalysis.org/blog 및 http://blogs.msdn.com/ntdebugging/default.aspx 라는 두 가지 훌륭한 리소스가 있습니다 .
다음은 WinDbg 사용에 도움이되는 추가 링크 이며, 대부분은 .NET 전용입니다.
- John Robbins가 cmdtree 를 사용하여 명령 창을 만드는 방법 에 대해 설명 합니다.
- 다음은 빠른 WinDbg / SOS 치트 시트 입니다.
- 그것이 깨진 경우, 당신이해야 그것을 해결 의 무리가 WinDbg를 / 조난 신호 주로 주변 ASP.NET 디버깅 관련 기사.
- 다음 은 MSDN mag의 SOS에 대한 이전 개요입니다. .NET 1.1에 대한 것이므로 그 시대가 보이고 있습니다.
네이티브 또는 관리 코드를 디버깅하는지 여부를 지정하지 않습니다. 대답에 영향을주지 않습니다. WinDbg는 두 가지 모두에 매우 유용하지만 많은 사람들은 .NET 앱을 디버깅 할 때 WinDbg가 다소 덜 관련성이 있다고 생각합니다. 별로. 보너스로, SOS 확장을 사용하여 WinDbg에서 .NET 앱을 디버깅하여 .NET 플랫폼이 작동하는 방식에 대해 많은 것을 배울 수 있습니다. WinDbg에서 .NET 앱을 실행 (또는 연결)하고 다음을 입력합니다.
.loadby sos mscorwks
... 사용중인 CLR 버전에 맞는 확장을로드했는지 확인합니다. 그런 다음 입력 ...
!help
... SOS 확장에서 사용할 수있는 명령을 확인합니다.
Microsoft에는 개발자 도구가 하나 뿐이고 WinDbg라는 농담을 들었습니다. 디버깅에 필요한 모든 것이 거기 또는 확장에 있습니다. 물론, 그 중 일부는 친숙한 UI로 VS에서도 사용할 수 있습니다 ... :-)
NT4.0 서버에서 .dmp 파일을 받았을 때 사용했습니다. MSVC는 이러한 이전 형식 파일을로드하지 않습니다.
커널 디버깅과 원격 사용자 모드 디버깅을 혼합합니다.
AFAIK, Visual Studio 는 내가 "솔루션"이라고 설명하는 모드에서 여전히 원격 디버깅을 수행 할 수 없습니다. 이것이 windbg를 사용하는 좋은 이유입니다.
문제:
- 1394에 걸쳐 windbg를 설정합니다. 앱이 "대상"에서 실행됩니다. Windbg는 "호스트"에서 실행됩니다.
- 호스트에서 Visual Studio 실행
- Visual Studio에서 원격 도구를 사용하여 대상에서 앱을 시작하도록합니다.
- 커널 모드 windbg로 들어가서 타겟을 중지하십시오.
- Visual Studio의 TCP 연결이 시간 초과 될 때까지 기다립니다.
- windbg의 "g"는 대상을 중지 해제합니다.
- 원격 모니터가 네트워크 연결이 끊어 졌음을 인식하면 앱 "팝"을 관찰하십시오.
- 앱을 다시 시작하십시오 :(
해결책:
- Visual Studio를 사용하지 마십시오.
- "-server"를 사용하여 대상에서 사용자 모드 windbg를 실행합니다.
- 대상의 windbg가 앱을 실행하도록합니다.
- 호스트에서 "-remote"로 대상에 연결하는 두 번째 windbg를 시작하십시오.
- TCP 연결이 끊어지면 호스트에서 다른 windbg 인스턴스를 시작하면 아무것도 손실되지 않습니다. 제어 사용자 모드 windbg 프로세스가 대상에서 실행 중이기 때문에 앱이 죽지 않았습니다.
또한 커널 모드와 사용자 모드 모두에 대해 동일한 디버거를 사용하는 것이 더 쉽다는 것을 알았습니다. windbg는 사용자 모드에서도 매우 강력하며 커널 모드와 사용자 모드 인스턴스 모두에서 내 자신의 windbg 확장을 활용할 수 있습니다.
가볍고 클라이언트의 컴퓨터에 설치하지 않고도 실행할 수 있으며 커널 모드를 디버깅 할 수 있습니다.
최신 Visual Studio에는 여전히 디버거가 자식 프로세스에 자동으로 연결되도록하는 windbg의 "-o"에 해당하는 항목이 누락되어 있습니까? 복잡한 .bat 파일에서 실행해야하는 앱 또는 상위 프로세스를 분기하고 종료하는 앱에 매우 유용합니다.
나는 항상 감시 및 추적 기능을 좋아했습니다. 'wt'-> 발생하는 모든 함수 호출을 출력 창에 인쇄합니다. 정말 멋진 물건 이었어요!
참조 URL : https://stackoverflow.com/questions/105130/why-use-windbg-vs-the-visual-studio-vs-debugger
'programing tip' 카테고리의 다른 글
itertools 모듈에서 izip을 가져 오면 Python 3.x에서 NameError가 발생합니다. (0) | 2020.12.25 |
---|---|
`ng serve` 출력 파일은 어디에 있습니까? (0) | 2020.12.25 |
localhost 용 스니퍼 (Windows OS) (0) | 2020.12.25 |
공유 메모리 대 메시지 전달은 대용량 데이터 구조를 어떻게 처리합니까? (0) | 2020.12.25 |
내 앱의 다른 모든 창 위에 WPF 창을 만드는 방법 (시스템 전체가 아님)? (0) | 2020.12.25 |