문제

Windbg 팬들은 그것이 매우 강력하다고 주장하며 나도 동의하는 경향이 있습니다.하지만 STL 컨테이너를 디버깅할 때 저는 항상 막히게 됩니다.변수가 스택에 있는 경우 !stl 확장 프로그램은 때때로 그것을 알아내지만, 복잡한 유형의 컨테이너(예: std::vector<TemplateField, std::allocator<TemplateField> >)이 힙이나 다른 구조의 일부에 있는데 그 내용을 보는 방법을 모르겠습니다.

팁과 조언을 감사드립니다.

도움이 되었습니까?

해결책

당신은 이것을주고 싶을 수도 있습니다 디버거 확장 시도. SDBGEXT라는 라이브러리입니다 스카이 윙.

다른 팁

종종 STL 데이터 유형에 대한 디버거 지원이 부적절하다고 생각합니다. 이런 이유로 나는 점점 더 많이 사용하고 있습니다 로깅 프레임 워크 및 로깅 문. 나는 이것들이 디버거를 사용할 수없는 사람들을위한 것이라고 생각했지만 이제는 그들이 실제 가치를 제공한다는 것을 알고 있습니다. 코드에 휴대용 디버깅 지식을 포함시켜 코드와 함께 유지할 수 있습니다. 대조적으로, 디버거에서하는 작업은 일반적으로 일시적입니다.

WINDBG (PYKD)의 파이썬 확장 스 니펫이 있습니다 stlp.py 지도 내용을 덤프 할 수 있습니다.
현재 STLPORT MAP 구현을 지원합니다. X86 및 X64에서 테스트되었습니다. 이것 기사 그것을 사용하는 방법을 보여줍니다 (러시아어의 경우, 예는 자기 설명 적입니다).

저도 얼마 전에 똑같은 질문을 받았어요.내 대답은 Visual Studio가 실제로 STL 및 복잡한 유형에 대해 더 나은 디버거라는 것입니다(Visual Studio가 MDbg보다 훨씬 더 나은 디버거인 것처럼).

이것은 WinDBG가 덜 강력하다는 것을 의미하는 것이 아니라 단지 낮은 수준이라는 것입니다(예:Visual Studio를 사용하여 크래시 덤프에 유용한 작업을 수행해 보세요. 불가능합니다.

어쨌든 귀하의 질문에 답하기 위해 Visual Studio를 사용하여 몇 가지 트릭을 사용하여 데이터 형식을 확인할 수 있습니다.

  1. WinDBG의 다른 인스턴스를 시작하고 비침습적으로 연결합니다. cdb -p <PID> -pv.이렇게 하면 디버기 스레드가 일시 중단됩니다.이제 원본 WinDBG를 안전하게 분리할 수 있습니다. qd
  2. Visual Studio를 연결한 다음 비침투적 WinDBG를 분리합니다. qd.STL을 보고 원하는 대로 계속하세요.
  3. WinDBG로 돌아가야 할 경우 1단계로 이동하여 침입형 WinDBG로 교체하세요.

나는 보통 a toString() 많은 수업에서 방법. 이것은 내가 중요하다고 생각하는 모든 정보를 보여줍니다. 모든 컨테이너는이를 호출하여 콘솔에 클래스 정보를 표시 할 수 있습니다.

DT -R IE DT YOUAPP! 클래스 7FFDF000 -R5 사용

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