我正在调试一个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
(我正在尝试这种方法。它需要永远启动程序。我从注册表中删除了最后两个条目以使其工作,可能是该方法本身有问题。)
或者文章没有非托管模块的 gc_heap::garbage_collect 中 .NET 4 运行时中的访问冲突描述了另一种方法:
(DWORD) StressLog = 1
(DWORD) LogFacility = 0xffffffff
(DWORD) StressLogSize = 65536
哪种方式是正确的或者还有其他方式correct way?
I 在 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
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)