2011-09-26 10 views
8

Sto eseguendo il debug di un danneggiamento dell'heap GC e ho raggiunto il punto in cui voglio provare a eseguire il programma con WinDbg + PageHeap + AppVerifier + GCStress.Come attivare GCStress in Windows 7?

ho trovato in questo articolo Software crash: faulting module mscorwks.dll, version 1.1.4322.2379 che posso abilitare GCStress in questo modo:..

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 

(Sto provando questo metodo Prende il programma sempre per lanciare ho cancellato le ultime due voci dal registro di sistema per farli funzionare, probabilmente c'è qualcosa di sbagliato con l'approccio stesso)

O l'articolo Access Violation in .NET 4 Runtime in gc_heap::garbage_collect with no unmanaged modules ha descritto l'altro metodo:.

0.123.516,410617 millions
(DWORD) StressLog = 1 
(DWORD) LogFacility = 0xffffffff 
(DWORD) StressLogSize = 65536 

Quale modo è corretto o c'è un altro corretto modo?

+0

Non capisco la domanda. Stai chiedendo come accenderlo, quindi di aver scoperto che puoi abilitarlo con il primo metodo, ma che non funziona. Il secondo metodo funziona? –

+0

@KierenJohnstone, non ho provato il secondo metodo e non sono sicuro se uno di questi è corretto. Questo è tutto ciò che ho trovato sul web su GCStress e vorrei che le persone competenti nell'argomento lo consiglierebbero. Ho scritto che il primo metodo è lento perché potrei pensare che probabilmente potrebbe essere reso più veloce impostando altri valori per le chiavi di registro specificate. –

risposta

0

I searched GCStress on Koders. Si è scoperto il modo migliore per capire è guardando .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 
};