컨트롤이 최종 사용자에게 표시되는지 여부를 토론하는 곳인 크래시 덤프가 있습니다. Visible 속성과 일치하는 true/false 값을 포함하는 명시적인 필드를 볼 수는 없지만, win32 teritory에서는 아마 그렇게 놀랍지 않을 것입니다. 누구 Visible 덤프 파일에서 반환했을 것이라고 추론하는 방법을 알고 있습니까?.Net 컨트롤이 windbg를 사용하여 표시되는지 확인하는 방법
감사 오스카는
컨트롤이 최종 사용자에게 표시되는지 여부를 토론하는 곳인 크래시 덤프가 있습니다. Visible 속성과 일치하는 true/false 값을 포함하는 명시적인 필드를 볼 수는 없지만, win32 teritory에서는 아마 그렇게 놀랍지 않을 것입니다. 누구 Visible 덤프 파일에서 반환했을 것이라고 추론하는 방법을 알고 있습니까?.Net 컨트롤이 windbg를 사용하여 표시되는지 확인하는 방법
감사 오스카는
내 최초의 생각이 오른쪽 필드를 찾는 단지 문제라고했지만, 실제로는 조금 더 파고했다. Reflector에서 Control을 보면 Visible 속성이 내부 상태 필드를 값 2 (STATE_VISIBLE 상수)와 비교하여 검사하는 GetVisibleCore를 호출한다는 것을 알 수 있습니다.
컨트롤이 보이는지 확인하려면 상태 필드를 찾고 비트 조작을해야합니다. 인스턴스의 주소가있는 경우
, 당신은 다음과 같은 작업을 수행 할 수
.shell -ci "!do <ADDRESS>" grep state (use findstr, if you don't have grep)
출력이
0:000> .shell -ci "!do 015892a4" grep state
03aeedcc 400112c 4c System.Int32 1 instance 17432589 state <=== HERE!
03aeedcc 400112d 50 System.Int32 1 instance 2060 state2
049ac32c 40011ef d0 ...lized.BitVector32 1 instance 01589374 state
03aeedcc 40011f0 ad4 System.Int32 1 static 1 stateScalingNeededOnLayout
03aeedcc 40011f1 ad8 System.Int32 1 static 2 stateValidating
03aeedcc 40011f2 adc System.Int32 1 static 4 stateProcessingMnemonic
03aeedcc 40011f3 ae0 System.Int32 1 static 8 stateScalingChild
03aeedcc 40011f4 ae4 System.Int32 1 static 16 stateParentChanged
공지 비슷한이며,이 개 상태 필드가 있음. 왜 이런 경우인지 보지 못했지만 원하는 것은 System.Int32입니다. 내 예에서이 17432589.
의 값이
return ((this.state & flag) != 0);
그래서 당신이 여기에서 할 일은 (17432589 & 2) != 0
입니다 다음 당신은 특정 인스턴스의 표시 상태를해야합니다으로 다시 GetState의 코드는 .
사실, 한 걸음 더 나아가 야 할 수도 있습니다. 위가 false를 반환하면 부모를 찾아서 트릭을 반복해야합니다. 필요하지 않은 Form을 사용하는 간단한 예제입니다.
매우 좋았습니다. 이제 제어 도구가 보이고 (내 사용자 권한 ...) 다른 곳에서 내 프로세스의 서버 상태가 컨트롤이 말한 것과 일치하지 않는다는 것을 알았습니다. 따라서 버그가 그 중간에 있어야합니다. :) – Oskar