2009-06-30 4 views
3

'dt'또는 '??'를 사용하여 일부 유형이 표시되는 방식을 변경하고 싶습니다. autoexp.dat로 어떻게 할 수 있는지와 비슷한 방식으로 이것을 할 수있는 방법이 있습니까?cdb/windbg에 autoexp.dat와 동일한 기능이 있습니까?

예를 들어,이 같은 구조 뭔가가 :


struct Foo 
{ 
    union Bar 
    { 
     int a; 
     void *p; 
    } b; 
}; 

을 그리고 나는 구조 줄에 점을 알고 모두 이들의 몇 백,의 배열을 가지고있다. 어쨌든이 'p'가 Bar에 대한 포인터라는 점을 cdb에 알릴 방법이 있습니까? 이것은 autoexp로 할 수있는 일입니다. (구체적인 예제는 여기에 어떤 유형의 키도 가질 수있는 stashtable이 있지만 키가 문자열이라는 것을 알 수 있습니다. 구현시이를 void 포인터로 저장합니다).

미리 감사드립니다.

답변

2

나는 autoexp.dat처럼 간단한 것은 없다고 생각합니다.

몇 가지 가능한 옵션이 있습니다. 디버거 명령으로 간단한 스크립트 파일을 작성하여 원하는 방식으로 데이터 구조를 덤프하고 "$<filename"명령 (또는 그 변형 중 하나)을 사용할 수 있습니다. 사용자 별칭과 결합하면 사용하기가 매우 쉽고 자연 스럽습니다.

두 번째 옵션은 좀 더 복잡하지만 훨씬 강력합니다. 데이터 구조를 덤프하는 확장 DLL을 작성하십시오. 당신이 말하는 것에 대해 아마 이것은 과잉이라고 할 수 있습니다. 하지만 디버거 확장을 통해 엄청난 힘을 얻을 수 있습니다 (실제로 디버깅 도구 패키지에서 제공되는 많은 기능이이 방식으로 구현됩니다). SDK는 디버거와 함께 제공되므로 필요할 경우 쉽게 확인할 수 있습니다.

1

또는 da에 유니 코드 또는 ASCII 문자열로 dump memory을 입력 할 수 있습니다.

+0

메모리에있는 다른 위치에있는 문자열을 가리키는 요소가있는 배열이있는 경우 배열의 일부로 해당 포인터의 주소에서 'da'를 호출 할 수 있습니까? – aaron

+0

배열의 시작 주소를 아는 경우 원하는 요소 (sizeof (struct) * i)의 시작 주소에서 오프셋을 계산 한 다음에 (DWORD가 정렬 된) 요소의 오프셋을 구조체. 디버거가 모든 멤버를 재귀 적으로 덤프하도록하려면 구조체의 주소에서 dt -r을 수행 할 수도 있습니다. –

관련 문제