8

GC 힙 손상을 디버깅 중이며 WinDbg + PageHeap + AppVerifier + GCStress에서 프로그램을 실행하고 싶은 단계로 왔습니다. .. Windows 7에서 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 

는 (나는이 방법을 시도하고 그것은 시작 영원히 프로그램을 소요 나는에서 마지막 두 항목을 삭제 :

는 나는이 같은 GCStress을 활성화 할 수 있습니다 기사 Software crash: faulting module mscorwks.dll, version 1.1.4322.2379에서 발견 레지스트리는 아마 뭔가 접근 방식 자체에 문제가 있습니다, 그것이 작동해야합니다)

또는 다른 방법을 설명 Access Violation in .NET 4 Runtime in gc_heap::garbage_collect with no unmanaged modules 기사 :.

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

어떤 방법이 맞습니까? 아니면 다른 것이 있습니까 길입니까?

+0

나는이 질문을 이해하지 못합니다. 당신은 그것을 켜는 방법을 묻는 중입니다, 그리고 당신은 당신이 첫 번째 방법으로 그것을 가능하게 할 수 있다는 것을 알았지 만 그것은 작동하지 않습니다. 두 번째 방법이 효과가 있습니까? –

+0

@KierenJohnstone, 나는 두 번째 방법을 시도하지 않았으며 둘 중 어느 것이 맞는지 확실하지 않습니다. 이것이 내가 웹에서 GCStress에 관해 발견 한 전부이며 주제에 능숙한 사람들에게 조언을 부탁합니다. 필자는 첫 번째 방법이 느린 이유는 지정된 레지스트리 키의 다른 값을 설정함으로써 속도가 더 빨라질 수 있다고 생각하기 때문입니다. –

답변

0

l. 그것을 이해하는 가장 좋은 방법은 다음과 같습니다. .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 
};