我的布尔变量可以使用语法
引用MPrime.exe Spirit.MPrimeComServerManager._isComServerReady
我尝试使用语法
?? MPrime.exe Spirit.MPrimeComServerManager._isComServerReady=1
我不确定如何将e*
命令用于托管代码。
这是!DumpObj
的输出:
00007fff81a6d6e8 4000198 169 System.Boolean 1 static 0 _isComServerReady
答案 0 :(得分:3)
让我们编写这个示例程序,看看Booleans如何在.NET中工作以及如何使用WinDbg更改值:
using System;
namespace ChangeValueOfBoolean
{
class Program
{
static void Main()
{
var h = new BooleanHolder();
h.BoolValue = true;
Console.WriteLine("Debug now. Boolean member has the value {0}", h.BoolValue);
Console.ReadLine();
Console.WriteLine("After debugging, boolean member has the value {0}", h.BoolValue);
h.BoolValue = true;
Console.ReadLine();
}
}
class BooleanHolder
{
public bool BoolValue { get; set; }
}
}
调试步骤:
.symfix;.reload
.loadby sos clr
!dumpheap -short -type BooleanHolder
!do <address>
将原始值转储到内存dd <address>+<offset> L1
我们会看到true == 1
ed <address>+<offset> 0
g
按 Enter
已切换为false
在WinDbg中完成演练:
0:004> .symfix;.reload
Reloading current modules
..........................
0:004> .loadby sos clr
0:004> !dumpheap -short -type BooleanHolder
025330c8
0:004> !do 025330c8
Name: ChangeValueOfBoolean.BooleanHolder
MethodTable: 00144d74
EEClass: 00141804
Size: 12(0xc) bytes
File: E:\Projekte\SVN\HelloWorlds\ChangeValueOfBoolean\bin\Debug\ChangeValueOfBoolean.exe
Fields:
MT Field Offset Type VT Attr Value Name
704bf3d8 4000001 4 System.Boolean 1 instance 1 <BoolValue>k__BackingField
0:004> dd 025330c8+4 L1
025330cc 00000001
0:004> ed 025330c8+4 0
0:004> g