研究崩溃转储,我遇到了一个完美的死胡同。 target
字段指向自己的代理。
0:000> !do 00000027ce9395f8
Name: System.EventHandler
MethodTable: 000007fb86cd5268
EEClass: 000007fb86ce2040
Size: 64(0x40) bytes
File: ...mscorlib.dll
Fields:
MT Field Offset Type VT Attr Value Name
000007fb867e5fa0 400002d 8 System.Object 0 instance 00000027ce9395f8 _target
000007fb867e5fa0 400002e 10 System.Object 0 instance 0000000000000000 _methodBase
000007fb86832290 400002f 18 System.IntPtr 1 instance 1ff71a0ae0 _methodPtr
000007fb86832290 4000030 20 System.IntPtr 1 instance 7fc24f737a8 _methodPtrAux
000007fb867e5fa0 4000031 28 System.Object 0 instance 0000000000000000 _invocationList
000007fb86832290 4000032 30 System.IntPtr 1 instance 0 _invocationCount
我认为没有任何重大错误。在_methodptr
之后,我找到了静态方法。
为什么_target
不为空呢?这种行为的逻辑是什么?