2011-09-26 10 views
8

Estoy depurando una corrupción de montón GC y llegué al paso en el que quiero intentar ejecutar el programa en WinDbg + PageHeap + AppVerifier + GCStress.¿Cómo activar GCStress en Windows 7?

que encontré en el artículo Software crash: faulting module mscorwks.dll, version 1.1.4322.2379 que puedo permitir GCStress así:..

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 

(Estoy tratando este método Se necesita el programa para siempre para poner en marcha He eliminado las dos últimas entradas de la registro de tener que funcione, probablemente algo está mal con el enfoque en sí)

O el artículo Access Violation in .NET 4 Runtime in gc_heap::garbage_collect with no unmanaged modules describe otro método:.

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

¿Cuál es la manera correcta o hay otra forma correcta ?

+0

No entiendo la pregunta. Usted está preguntando cómo activarlo y luego dice que descubrió que puede habilitarlo con el primer método, pero eso no funciona. ¿Funciona el segundo método? –

+0

@KierenJohnstone, no probé el segundo método y no estoy seguro de si alguno de estos es correcto. Eso es todo lo que encontré en la web sobre GCStress y me gustaría que las personas competentes en el tema lo asesoraran. Escribí que el primer método es lento porque puedo pensar que probablemente podría hacerse más rápido configurando otros valores para las claves de registro especificadas. –

Respuesta

0

I searched GCStress on Koders. Resultó que la mejor manera de entenderlo es mirando .NET's source code:

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 
};