2013-05-22 2 views
1

나는 내가 달리고 오래 전에 끝내야했던 과정을 가지고있다. 13 시간이 걸려서 몇 번만 끝나기를 기대했습니다. 여러 번 전에 성공적으로 실행되었습니다.실행중인 프로세스를 어떻게 디버깅합니까?

많은 데이터를 처리하는 것이 가능할 수 있으므로 합법적 인 시간이 필요하고 거의 완료되면 중간에 중단하고 싶지 않습니다.

프로세스에 연결하여 방금 앉아 있는지 또는 실제로 처리 중인지 보려면 어떻게해야합니까? 침입하여 어떤 라인에 있는지 파악하고 지금까지 얼마나 많은 레코드를 처리했는지 확인할 수 있습니까?

windbg가 설치되어 있지만 올바른 도구인지 확실하지 않습니다. 필요한 경우이 응용 프로그램의 소스 코드도 있습니다.

답변

3

Visual Studio를 사용할 수 있습니다.

프로젝트의 솔루션을 열고 디버그 메뉴에서 프로세스에 첨부를 선택하십시오.

+0

불행하게도 실행중인 서버에 Visual Studio를 설치할 수 없습니다. – richard

+1

@RichardDesLonde 당신은 원격 디버거를 설치할 수 있습니다. –

+0

일단 프로세스에 연결되면, 그 다음은 무엇입니까? 나는 그것이 처리하고 있다고 생각하는 중단 점을 설정합니까? – richard

2

Visual Studio를 사용할 수없는 경우 원격 디버깅을 사용할 수 있습니다. the remote debugger client을 설치해야하지만 작은 설치이므로 다시 시작하지 않아도됩니다. (afair)

+0

일단 원격 디버깅을 설치하면 응용 프로그램을 만들고 중단 점을 설정 한 프로젝트 내에서 프로세스에 연결할 수 있습니까? – richard

+0

응용 프로그램이 Windows Server 2003 서버 및 프로세스 i .net 4.0에서 실행 중입니다 ... 디버거 설치를 시도했지만 최신 버전의 Windows가 필요합니다. – richard

+0

이상한, 원격 디버거가 특정 Windows 버전 만 지원한다고 생각하지 않았습니다. 올바른 버전 (x86 용 32 비트 또는 x64 용 64 비트)을 설치하려고 했습니까? –

2

windbg가 설치되어 있다고 말하면 dev machine이나 on 장기 실행 프로세스가 실행중인 시스템 후자의 경우 .NET 프로세스이므로 windbg와 프로세스의 비트가 일치해야합니다 (예 : 32 비트 .NET 프로세스를 디버깅하려면 32 비트 windbg, 64 비트 프로세스를 디버깅하려면 64 비트 windbg). 관리 디버깅 확장을로드

그런 다음 .symfix;.reload

다음으로 귀하의 경로를 수정 | (... 프로세스에 첨부 파일)이 과정의 비트 수를 결정하면, 프로세스에 비트 수의 일치 windbg를 첨부 .loadby sos.dll clr

로 : 지금 당신은 ~*e !clrstack 모든 관리되는 스레드 스택을 덤프하고 무엇을보고 각 관리 스택을 검사 할 수 있습니다

(주. 위의 위의 .NET v4에 대한 작품과 .NET의 이전 버전 .loadby sos.dll mscorwks 필요) 각 스레드는 까지.

시도 할 또 다른 사항은 각 관리되는 스레드에 대한 마지막 관리 예외를 !threads으로 보는 것입니다. 그러면 관리되는 각 스레드가 나열되고 해당 스레드에 대한 마지막 관리 예외가있는 경우이를 나타냅니다. 그런 다음 관리 예외를 검사 할 수 있습니다. !pe <ex-addr>

관련 문제