2016-08-24 7 views
0

x 명령은 절대로 효과가 없습니다. 내가 할 수있는 dv 로컬 변수를 보여 주지만 클래스의 멤버 변수를 표시하지 않습니다. 나는 watch localals 변수 창을 사용하여 그 값을 보았지만 어떻게 x 명령을 통해 그들을 볼 수 있습니까?WinDbg에서 멤버 변수의 값을 보는 방법은 무엇입니까?

예를 들어, 모듈에 변수가 있습니다. Db!MyRecordSet::m_strQuery m_strQuery의 값을 어떻게 볼 수 있습니까?

x Db!MyRecordSet m_* 

을하지만 아무것도 아니면 그냥 일이 아무것도처럼 반환하는 모든 message..it를 표시하지 않고 반환

나는 특히이 같은 모든 멤버 변수를 참조하는 와일드 카드를 사용할 것을 좋아합니다. 나는 MASM 문서 권리를 얻는 경우에

+0

수 있었다 또 다른 옵션 (= 검사 기호), 그냥 작동하지 않거나 구문이 없습니다.? 멤버 변수에 액세스/언급하는 방법을 모르겠습니다. 클래스 및 그 클래스의 멤버보다 모듈에 있습니다. – zar

+0

그것은 뭔가 다른 것을합니다 : 그것은 상징을 찾는 것입니다. 일단 발견되면'dt' (디스플레이 타입)을 사용하십시오. –

+0

@ThomasWeller 그것은 함수를 찾지 만 심볼 인 멤버 변수를 찾지 못하는 이유는 무엇입니까? – zar

답변

1

, 두 개의 콜론과의 구문은 문자에 대한 확인을해야 :

를 사용하여 두 개의 콜론 (: :) 또는 두 개의 밑줄 (__) 클래스

의 멤버를 표시하기

릴리스 빌드에서 컴파일러가 멤버 변수를 최적화 할 수 있다고 생각할 필요가 있습니다. 그 외에는

x 명령 그러므로 나는 당신과 함께 dt (D isplay t 타 입) 명령을 찾고있는 생각, 기호 자체 만 표시 할 수 있으며 메모리 주소에 매핑하지 않습니다 하나

재귀 표시
dt -r Db!MyRecordSet <address> 

또는 3 레벨 트리 주어진 계층 구조 수준

dt Db!MyRecordSet... <address> 

로 확대했다. (I 손에서 예를 들어이 없기 때문에)

예, WinDbg는의 문서에서 인용 :

0:000> dt nt!_PEB CriticalSectionTimeout.. 7ffdf000 
    +0x070 CriticalSectionTimeout : 0xffffe86d`079b8000 
     +0x000 LowPart     : 0x79b8000 
     +0x004 HighPart     : -6035 
     +0x000 u      : 
     +0x000 LowPart     : 0x79b8000 
     +0x004 HighPart     : -6035 
     +0x000 QuadPart     : -25920000000000 

`x` 명령이있는 C++ 평가

[email protected]@c++(variable->member) 
+0

'x'는 멤버 변수를 표시하지 않고 와일드 카드는' dt 중 하나입니다. 나는 그것이해야하는 것을 안다. 그러나 그것이 모르는 이유를 모른다. – zar