문제
Windbg 팬들은 그것이 매우 강력하다고 주장하며 나도 동의하는 경향이 있습니다.하지만 STL 컨테이너를 디버깅할 때 저는 항상 막히게 됩니다.변수가 스택에 있는 경우 !stl
확장 프로그램은 때때로 그것을 알아내지만, 복잡한 유형의 컨테이너(예: std::vector<TemplateField, std::allocator<TemplateField> >
)이 힙이나 다른 구조의 일부에 있는데 그 내용을 보는 방법을 모르겠습니다.
팁과 조언을 감사드립니다.
다른 팁
종종 STL 데이터 유형에 대한 디버거 지원이 부적절하다고 생각합니다. 이런 이유로 나는 점점 더 많이 사용하고 있습니다 로깅 프레임 워크 및 로깅 문. 나는 이것들이 디버거를 사용할 수없는 사람들을위한 것이라고 생각했지만 이제는 그들이 실제 가치를 제공한다는 것을 알고 있습니다. 코드에 휴대용 디버깅 지식을 포함시켜 코드와 함께 유지할 수 있습니다. 대조적으로, 디버거에서하는 작업은 일반적으로 일시적입니다.
WINDBG (PYKD)의 파이썬 확장 스 니펫이 있습니다 stlp.py 지도 내용을 덤프 할 수 있습니다.
현재 STLPORT MAP 구현을 지원합니다. X86 및 X64에서 테스트되었습니다. 이것 기사 그것을 사용하는 방법을 보여줍니다 (러시아어의 경우, 예는 자기 설명 적입니다).
저도 얼마 전에 똑같은 질문을 받았어요.내 대답은 Visual Studio가 실제로 STL 및 복잡한 유형에 대해 더 나은 디버거라는 것입니다(Visual Studio가 MDbg보다 훨씬 더 나은 디버거인 것처럼).
이것은 WinDBG가 덜 강력하다는 것을 의미하는 것이 아니라 단지 낮은 수준이라는 것입니다(예:Visual Studio를 사용하여 크래시 덤프에 유용한 작업을 수행해 보세요. 불가능합니다.
어쨌든 귀하의 질문에 답하기 위해 Visual Studio를 사용하여 몇 가지 트릭을 사용하여 데이터 형식을 확인할 수 있습니다.
- WinDBG의 다른 인스턴스를 시작하고 비침습적으로 연결합니다.
cdb -p <PID> -pv
.이렇게 하면 디버기 스레드가 일시 중단됩니다.이제 원본 WinDBG를 안전하게 분리할 수 있습니다.qd
- Visual Studio를 연결한 다음 비침투적 WinDBG를 분리합니다.
qd
.STL을 보고 원하는 대로 계속하세요. - WinDBG로 돌아가야 할 경우 1단계로 이동하여 침입형 WinDBG로 교체하세요.
나는 보통 a toString()
많은 수업에서 방법. 이것은 내가 중요하다고 생각하는 모든 정보를 보여줍니다. 모든 컨테이너는이를 호출하여 콘솔에 클래스 정보를 표시 할 수 있습니다.
DT -R IE DT YOUAPP! 클래스 7FFDF000 -R5 사용