2009-05-06 4 views
1

실수로 kd를 실행하고 저에게 흥미로운 결과를 얻었습니다. 모듈의 코드 줄에 대한 참조는 어떤 스레드의 호출 스택에서도 볼 수 없습니다. 라인은 메소드의 시작이 아니므로 참조가 함수 포인터라고 생각하지는 않지만 아마도 메모리에 예외가 저장되는 결과 일까?"kd"명령의 windbg 명령은 무엇을 수행합니까?

예외의 스택 추적은 다음과 같습니다 :

0:000> kb 
    *** Stack trace for last set context - .thread/.cxr resets it 
ChildEBP RetAddr Args to Child    
0174f168 734ea84f 2cb9e950 00000000 2cb9e950 kernel32!LoadTimeZoneInformation+0x2b 
0174f1c4 734ead92 00000022 00000001 000685d0 msvbvm60! RUN_INSTMGR::ExecuteInitTerm+0x178 
0174f1f8 734ea9ee 00000000 0000002f 2dbc2abc msvbvm60! RUN_INSTMGR::CreateObjInstanceWithParts+0x1e4 
0174f278 7350414e 2cb9e96c 00000000 0174f2f0 msvbvm60! RUN_INSTMGR::CreateObjInstance+0x14d 
0174f2e4 734fa071 00000000 2cb9e96c 0174f2fc msvbvm60!RcmConstructObjectInstance+0x75 
0174f31c 00976ef1 2cb9e950 00591bc0 0174fddc msvbvm60!__vbaNew+0x21 

우리의 코드로 (새로운 양식을 만들 물론, 내가가 ...

업데이트 찾고있는 무슨 될 일이 파생 클래스)

DDS를 출력 :

0:000> dds esp-0x40 esp+0x100 
0174f05c 00000000 
0174f060 00000000 
0174f064 00000000 
0174f068 00000000 
0174f06c 00000000 
0174f070 00000000 
0174f074 00000000 
0174f078 00000000 
0174f07c 00000000 
0174f080 00000000 
0174f084 00000000 
0174f088 00000000 
0174f08c 00000000 
0174f090 00000000 
0174f094 00000000 
0174f098 00000000 
0174f09c 007f4f9b ourDll!formDerivedClass::Form_Initialize+0x10b [C:\Buildbox\formDerivedClass.frm @ 1452] 

등을

이것은 Initialize가이 예외 또는 스레드 중 하나의 스택 추적에 있지 않더라도 호출 중임을 나타내는 것 같습니다. 제안 된대로, 그것은 모두 pdbs와 dll 사이의 불일치가 될 수 있지만, 우리가 올바른 클래스와 방법으로 끝나는 것은 우연한 것처럼 보입니다.

답변

1

Kd는 "스택 덤프"를 의미합니다. 설명서에서 :

kd 명령은 원시 스택 데이터를 표시합니다. 각 DWORD 값은 에 별도의 줄로 표시됩니다. 심볼 정보는 해당 라인에 대해 이고 연관된 심볼은 입니다. 이 형식 은 다른 k * 명령보다 자세한 목록을 만듭니다. kd 명령은 스택 주소를 매개 변수로 사용하는 dds (메모리 표시) 명령에 해당하는 입니다.

.hh를 사용하여 ntsd/windbg 내부에서 디버거 도움말을 얻으십시오.

는 "DDS는 ESP-× 40은 ESP + 0x80으로"

+1

그렇다면이 스택 라인은 스레드의 호출 스택에 포함되지 않는 이유는 무엇입니까? 거기에있는 이유를 알 수 있도록 호출 함수로 그 중 하나를 추적하는 명령이 있습니까? – Oskar

+1

출력물을 보지 않고 말하기는 어렵습니다. 최적화 된 코드 (릴리스)를 디버깅하는 경우 스택은 꽤 펑키하게됩니다. 디버거는 주소를 기호와 일치 시키려고 시도합니다. 때로는 오류를 가져옵니다. 정말 이해가되지 않는다면 스택 손상이되거나 잘못된 심볼이로드됩니다 (pdb가 일치하지 않습니다). –

+1

필자는 pdbs가 일치하고 있음을 확신합니다 (이전에 pdbs를 얻기 위해 바이너리를 다시 작성했습니다). 더 많은 정보로 질문 업데이트하기 – Oskar

0

실례보기,하지만 당신은 실제로 "KB"명령을 실행처럼 좀 보인다 -에 "B"가 아닌 "D"로. 그게 위의 세션에서 나타나는 것입니다 그리고 http://www.debuginfo.com/articles/easywindbg.html의 예제는 확실히 비슷한 출력을 생산하는 것 같습니다 ...

관련 문제