我得到了一个crashdump,我们正在讨论控件是否对最终用户可见。看看!我看不到任何明确的字段,它保存与Visible属性匹配的真/假值,这并不令人惊讶,因为我们可能在win32 teritory中下降。有谁知道如何推断Visible将从转储文件返回的内容?如何判断.net控件是否使用windbg可见
感谢 奥斯卡
我得到了一个crashdump,我们正在讨论控件是否对最终用户可见。看看!我看不到任何明确的字段,它保存与Visible属性匹配的真/假值,这并不令人惊讶,因为我们可能在win32 teritory中下降。有谁知道如何推断Visible将从转储文件返回的内容?如何判断.net控件是否使用windbg可见
感谢 奥斯卡
我最初的想法是,这仅仅是一个仰视右外场的问题,但实际上花多一点挖。如果您查看Reflector中的Control,您会看到Visible属性调用GetVisibleCore,它检查内部状态字段的值2(恰好是常量STATE_VISIBLE)。
所以为了找出控件是否可见,我们需要找到状态字段并进行一些操作。
如果你有实例的地址,你可以做到以下几点:
.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.
值在GETSTATE的代码如下
return ((this.state & flag) != 0);
因此,所有你从这里做的是(17432589 & 2) != 0
,你就会有具体的实例可见状态。
其实,你可能需要更进一步。如果上述返回false,则需要查找父项并重复该技巧。对于我使用不必要的Form的简单示例。
非常好,现在我知道该控件是可见的(并且我的用户权利...),并且在其他地方已验证我的过程中的服务器状态与控件所说的内容不一致,所以错误必须介于两者之间的某个位置:) – Oskar 2009-10-26 15:08:23