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)
哪种方式是正确的还是有另一种正确的方法?
我在 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)
| 归档时间: |
|
| 查看次数: |
1477 次 |
| 最近记录: |