2010-11-29 4 views
3

Syslog 용 멀티 스레드 C# 서버에서 작업하고 있습니다. 장기 실행 실험을 수행하려고하는데, 한 시간이 지나면 서버가 멈 춥니 다 (특정 시간이 지나면 로깅이 중지됨)..NET 응용 프로그램이 멈추고 디버그 할 수 없습니다.

Visual Studio에서 Debug 모드로 실행 해 보았습니다. 스레드가있는 위치에 대한 유용한 정보를 얻기 위해 멈춤 및 누름을 찾았을 때 Visual Studio에서 원격 디버깅 모니터가 다운되었다고했습니다. 로컬 응용 프로그램입니다.

프로세스를 일시 중지하고 스레드 상태에 대한 유용한 정보를 얻으려면 어떻게해야합니까?

+1

플랫폼 대상을 x86으로 설정하면 원격 디버거를 처리 할 필요가 없습니다. –

+0

불행히도, 결과가 없습니다. 저는 Windows 7 x64를 사용하고 있습니다. x64를 강제해야합니까? –

답변

0

WinDBG은 VS가 트랩 할 수없는 저급 문제에 대한 좋은 대안입니다. 여기에서 자세한 정보를 찾을 수 있습니다 : Debugging Tools for Windows

3

Managed stack explorer은 관리되는 응용 프로그램을 폴링하고 현재 무슨 일이 일어나고 있는지를 기록합니다.

This article도 유용 할 수 있지만 (hang 모드 덤프에 대한 섹션) 크래시 덤프 파일을 디버깅해야합니다. WinDbg는 Visual Studio만큼 쉽게 흡수 할 수 없으며 배우기까지 약간의 시간이 소요됩니다.

+0

+1 멋지다. 이걸 몰랐어. – Aliostad

+0

흠 ... 시도해 봤지만 devenv.exe와 dexplore.exe 만 보여줍니다. (VS2008을 실행하는 3 개의 인스턴스, 서버 디버그 1 개, 클라이언트 디버그 1 개, 다른 유휴 상태) ... –

+0

MSE를 현재 실행중인 프로세스, 디버거가 필요하지 않습니다. – StingyJack

1

나는 StingyJack의 추천을 시도 하겠지만 Debug.WriteLine()을 사용하여 경량 추적을 대체하고 Sysinternal의 DebugView를 사용하여 무슨 일이 일어나고 있는지를 알 수 없습니다.

여기가 이 될 것입니다. VS는 멀티 스레드 서비스를 디버그하는 데 도움이 될만큼 강력하지 않습니다. 때로는 객체 상태에 놓여 염두에두고 심지어 디버그 일 때 은 정상적인 이벤트 흐름을 방해합니다.

+0

VS에서 디버깅의 용이성을 좋아하지만, @Aliostad가 옳다. 심지어 가장 좋은 경우에도 디버거가 연결되어있을 때 이벤트의 순서가 이벤트 순서를 미러링하지 않을 수 있으므로 경쟁 조건 및 기타 프로덕션 환경의 버그는 디버거에서 트랩하려고 할 때 사라질 수 있습니다. Debug.WriteLine은 멀티 스레드 응용 프로그램을 디버깅하는 유일하고 완전히 신뢰할만한 방법으로 안전합니다. – SqlRyan

+0

추적을 통한 임의 교착 상태 디버깅은 매우 까다로 우며 변경된 타이밍은 교착 상태를 해결할 수 있습니다. 또는 한 시간 정도 기다리지 않고 바로 실행하십시오. 물론 달이 물병 자리에있을 때만 일어납니다. –

+0

관리되는 교착 상태라면 발견 할 수 있었을 것입니다. 과거에는 항상 그들을 탐지하는데 성공했습니다. 다행히도 잠재적 인 문제의 원인이되는 구성 요소를 격리했을 수도 있습니다. –

관련 문제