Как включить GCStress в Windows 7? - PullRequest
       34

Как включить GCStress в Windows 7?

8 голосов
/ 26 сентября 2011

Я отлаживаю 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

(я пытаюсь этот метод. Требуетсяпрограмма навсегда запустилась. Я удалил последние две записи из реестра, чтобы она заработала, возможно, что-то не так с самим подходом.)

Или статья Нарушение прав доступа в .NET4 Среда выполнения в gc_heap :: garbage_collect без неуправляемых модулей описала другой метод:

(DWORD) StressLog = 1  
(DWORD) LogFacility = 0xffffffff  
(DWORD) StressLogSize = 65536

Какой путь правильный или есть другой правильный путь?

1 Ответ

0 голосов
/ 10 февраля 2012

I искал GCStress в Koders . Оказалось, что лучший способ понять это - взглянуть на исходный код .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
};
...