如何在Windows 7中打开GCStress?

net*_*rog 8 .net windows debugging garbage-collection heap-corruption

我正在调试GC堆损坏,并且我想尝试在WinDbg + PageHeap + AppVerifier + GCStress下运行程序.

我在文章软件崩溃中找到了:故障模块mscorwks.dll,版本1.1.4322.2379我可以像这样启用GCStress:

reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f  /v HeapVerify  /t REG_DWORD  /d 1  
reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f  /v StressLog  /t REG_DWORD  /d 1  
reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f  /v GCStress  /t REG_DWORD  /d 3  
reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f  /v FastGcStress  /t REG_DWORD  /d 2
Run Code Online (Sandbox Code Playgroud)

(我正在尝试这种方法.它会永远启动程序.我从注册表中删除了最后两个条目以使其工作,可能是方法本身出了问题.)

或者gc_heap :: garbage_collect中没有非托管模块的.NET 4 Runtime中的文章访问冲突描述了另一种方法:

(DWORD) StressLog = 1  
(DWORD) LogFacility = 0xffffffff  
(DWORD) StressLogSize = 65536
Run Code Online (Sandbox Code Playgroud)

哪种方式是正确的还是有另一种正确的方法?

kiz*_*zx2 0

在 Koders 上搜索了 GCStress。事实证明,理解它的最好方法是查看.NET 的源代码

enum  GCStressFlags {
    GCSTRESS_NONE               = 0,
    GCSTRESS_ALLOC              = 1,    // GC on all allocations and 'easy' places
    GCSTRESS_TRANSITION         = 2,    // GC on transitions to preemtive GC
    GCSTRESS_INSTR_JIT          = 4,    // GC on every allowable JITed instruction
    GCSTRESS_INSTR_NGEN         = 8,    // GC on every allowable NGEN instruction
    GCSTRESS_UNIQUE             = 16,   // GC only on a unique stack trace
};
Run Code Online (Sandbox Code Playgroud)