나는 큰 파일을 처리하는 디버그로 어떤 작업을 하고 있다. , 는 .NET 의 코드 자체가 수축됐는데 산발적인 오류뿐만 보고됨 런타임용으로 개발하십시오 할 수 있다. 여기에 대한 처리 컨텍스트로 1.5GB 파일 (메모리에 로드된 한 번만) 및 릴리즈됨 처리되고 있는 루프 시도하시려면 재현하기 위해 고의적으로 신들은 예측할 수 없는 오류가 발생했습니다.
내 테스트 부분은 기본적으로:
try {
byte[] data =File.ReadAllBytes(path);
for(int i = 0 ; i < 500 ; i++)
{
ProcessTheData(data); // deserialize and validate
// force collection, for tidiness
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.WaitForPendingFinalizers();
}
} catch(Exception ex) {
Console.WriteLine(ex.Message);
// some more logging; StackTrace, recursive InnerException, etc
}
(일부 시간대 및 기타 물건을 throw in)
루프 처리할 수 있는 모든 것을 완벽하게 성공적으로 - 과태료를 비결정론적 이터레이션에 문제 없음. 갑자기 그 프로세스가 끝납니다. 예외 없는 처리기에서 했다. 하지만 많은 메모리 사용 중에 아주 아주 잘 테스트 높여줍니까 mediaagent 형부 보고 각 이터레이션에 (없는 명백하네 메모리 누수가 저는 많은 헤드룸을 14gb 비사용률 기본 메모리 (이 시점에서 가장 - 톱니). 이 프로세스는 64-비트.
윈도우 오류 로그 항목을 포함하고 있는 3 개의 새로운 (종료 코드를 통해 80131506) 제안하세요 오버클로킹된 실행 엔진을 오류- 끔찍한 리틀이에요 녀석. [관련 답변] 는 (https://stackoverflow.com/a/4367865/23354) 는 GC 오류, 수신기마다 " 제안됩니다 fix"; 비활성화하려면 concurrent GC; 그러나 이 " fix"; 이 문제를 막을 수 없습니다.
설명: 이 가운데 낮은 수준의 오류 '이벤트' 커랑도맹.운핸들데스세페시옹 않습니다.
설명: 이 속에는 '만' 톱 톱니 그c콜레스 모니터링하도록 tufts. 셨으며 예측 가능한 메모리 누수와 계속 확인할 수 있습니다. 멀리 갈 수 있도록 분리 문제가 되지 않는다. 그냥 하면, 이 때문에 더 많은 메모리를 렉시한테서 사이에 큰 파일을 이터레이션에 디엠피는; p
내가 그 동안 추적, 장애 발생 사실을 알고 더 추가하여 콘솔입니다 각:
그래서 다수의 시나리오에서와.
내가 충돌 덤프 (디엠피는) 파일을 구할 수 있다. 이번 수사가 어떻게 볼 수 있게 하는 것이 더 시스템이 실패하면 그러하매 스펙타클한?
에스타크 셀명 실행하는 것 '!' (혼합됨 기본 및 관리됨 stack trace) 의 경우, 아무것도 볼 수 있는 # 39 there& 이동줄을 out in the stack trace. 내가 내 테스트 프로그램, 스택 추적 결과 이 중 한 곳에서 내 배 피에 들어온넘 (I was 손상되는 나온 이 힙):
스레드할 0 현재 프레임: + 검사 0xa 나와이퍼싱글로비치 나들러! 하위 sp 레타데르 요청자에게, 수신자 00000089879bd3d0 000007fc586610ea 웨이트퍼싱글로비치릭스 + 0x92 나와이퍼싱글로비치 나들러, 호출하십시오 커넬바제!! 00000089879bd400 000007fc5869811c 레이제1세페시옹 + 0x68 틀레이제1세페시옹 나들러, 호출하십시오 커넬바제!! [.] clr) '를 wks::gc_heap::mark_phase 00000089879bec80 000007fc49109cf6 wks::gc_heap::gc1+0x96 clr!! clr 00000089879becd0 000007fc49109c21 WKS::gc_heap::garbage_collect + 0x222 호출하십시오 WKS::gc_heap::gc1, clr!! clr 00000089879bed10 000007fc491092f1 레스트라티 조슈아프 주 + 0xa2 호출하십시오 레스메런타임 스레드할, clr!! clr 00000089879bed60 000007fc4910998d 가르바게컬치의션 조슈아프 주 + 0xdd 호출하십시오 wks::gc_heap::garbage_collect, clr!! clr 00000089879bedb0 000007fc4910df9c 조슈아프 할당이 주 + 0x31b 호출하십시오 가르바게컬치의션 조슈아프 주, clr!! 00000089879bee00 000007fc48ff82e1 JIT_NewArr1+0x481 clr! < /pre>;
이 때문에 가비지 컬렉터, 힙 손상을 관련이 있을 수 있습니다 '내가' 함장님이요 브리피힙 시도할 것이라고 밝혔다. 적어도 실망에는 할 수 있는 그대로 smartupdate 힙 (heap) 이 될 수도 있다는 사실을 알게 (그리고 다른 문제가 거짓한) 또는 P / Invoke 루틴을 손상되는 문제를 함께 GC 또는 일부 정보기술 (it).
내가 할 수 있는 방법에 대해 찾을 수 있다면, 많은 힙 힙 손상되어 있다 할 수 있는 '!' 를 통해 헤프스타트 손상됨 될 수 있습니다. 그냥 보여줄 수 있는 특정 시점, 어쨌든요 손상됨 전체 힙
예를 들어, 내가 찾아서 함께 경우 문제가 될 수 있다면 꼭 이래야겠어요 보면 힙 및 카타시안 마무리라뇨 GC 기괴함, [CLR GC 이벤트] (http://msdn.microsoft.com/en-us/library/ff356162.aspx) 의 이벤트 추적 windows*용.
'에서' 탭 종료하십시오 silent. 프로세스 실행 파일 이름에 경로를 not 입력하십시오., 전체 it. (예: '테스타프로그램지레스'). 다음 설정:
및 설정을 적용합니다.
접속 및 충돌 테스트 프로그램을 cdb 불지옥으 경우, 당신을 기다리고 연결됩니다. Windbg mm_mail_doc. Ctrl+R 시작 및 사용하여 연결 문자열을: 'tcp :포트 = 5005, 서버 = 로컬호스트'.
대신 사용할 수 있는 경로를 사용하여 원격 디버깅 툴 ' {} \windbg.exe 건너띄기 디버깅하지 %e'. 그러나 ',' I believe 는 베르포t.렉세 못했기 때문이라고 하는 이유는 제안됩니다 원격입니다 대신 어떤 판독합니다 모니터 프로세스에 디버거를 0 의 세션 및 출시 레지스트리로 시작할 예정이다.
윈도우 스테이션을 접속되어야 수동 및 세션 0 할 수 있습니다, 하지만 난 어떻게 that& # 39, s, t # 39 can& 너희에게베풀어진 수행되. # 39, d, s 도 it& # 39 때문에 불편한 you& 번갈아 가며 세션에 액세스할 수 있는 할 경우 기존 indows you& # 39, 공개을 숨기지 않았다.
',', .Net Framework 디버깅하지 General-> 활성화하십시오 Debugging-> Tools->.
'Tools-> IntelliTace->; 린텔리타세이벤츠 및 콜 정보를 '
'Tools-> IntelliTace->; '이 디렉토리에는 스토린텔리타스 설정되었습니다 아니다.
선택하고 디렉터리입니다
net 코드 및 추적 할 수 있도록 앞당기세요 모든 단일 함수 호출. 난 작은 샘플 프로젝트 및 작동하잖아 대한 노력은 한 것 같습니다
예를 들어, 그 후 각 디버그입니다 세션 녹음 세션을 만들 수 있는 디버그입니다. 이 세트 디렉터리입니다 그가 저지른 경우에도 CLR 않을 경우 임
이렇게 하면 에스테스 전에 호출하십시오 가져올 수 있는 컬러 축소됨.
일반 예외 핸들러 및 있는지 먹어서나 시도하시겠습니까 처리되지 않은 idfsysobject. 서있느라 너회의 app.
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyExceptionHandler);
static void MyExceptionHandler(object sender, UnhandledExceptionEventArgs e) {
Console.WriteLine(e.ExceptionObject.ToString());
Console.WriteLine("Press Enter to continue");
Console.ReadLine();
Environment.Exit(1);
난 보통 인베시스게이트 메모리 관련 문제가 Valgrind, gdb.
Windows 에서 운영할 경우 몇 가지 대안을 위한 좋은 등 많은 것을 제안한 바와 같이, br /> 브라이슬레예프 칼그리드 here:<. https://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows
진짜 원한다면 디버그로 런타임용으로 개발하십시오 전날에약혼자에게 문제가 없다는 게 내부 오류를 닷넷 (.net) 기반 클래스 라이브러리 또는 괜찼습니다 소스임을 vmo.
이후 너회가 can& # 39, t, t, 내가 가지고 있는 제안하세요 디버그입니다 너희는너희가 don& # 39 (별도로 디 컴파일 .NET framework 라이브러리보다는 물을 함께 일스피 추가하고, 이는 여전히 doesn& 프로젝트로, t # 39 를 다루는 vmo), br /> 모노 runtime.< 사용할 수 있습니다. 거기 있을 뿐 아니라, br 의 클래스 라이브러리를 소스 모두 VM.< />. 아마 괜찮지 작동됨 문제 해결, 모노, 그런후에도 너회의 약간만이라도 프로그램에 적어도 deltamove it&, s # 39 만 한 번 처리 과제다.
없으면 백업이었습니다 디버깅하지 FAQ 를 포함한 광범위한 support&l br />, , * GDB http://www.mono-project.com/Debugging
또한, 이 게시물에 대해 support:< valgrind, br /> 미겔 http://tirania.org/blog/archive/2007/Jun-29.html
이와 함께, let it 의 경우 실행하십시오 linix 사용할 수도 있습니다. 2, [strace] # 39 what& 볼 수 있는 상황을 잘 syscall. # 39 don& 없는 경우, 일반적으로 광범위한 윈포름스 사용 또는 비네이피 페이징됩니다 프로그래밍합니다 작동합니까 대해 과태료, 닷넷 (.net) 기반 리눅스 (문제에 대한 관련 파일 시스템 대 / 소문자 구분, 할 수 있는 파일 시스템 및 / 또는 사용에 룹문트 대소문자를 구분하지 않는 MONO_IOMAP).
모노 수르스고데, br /> here:< 사용할 수 있습니다. http://download.mono-project.com/sources/
여러분은 관심을 최신값 모노 version< 관계자들은 "br />; http://download.mono-project.com/sources/mono/mono-3.0.3.tar.bz2
https://www.meebey.net/posts/mono_3.0_preview_debian_ubuntu_packages/
그것은 여분이라일러라 컴파일하십시오 it:< 수르스고데 변경해야 할 경우, br />; http://ubuntuforums.org/showthread.php? t = 1591370