2008-09-19 3 views
4

모든 종류의 작업을 수행하는 다중 스레드가있는 .Net 응용 프로그램에서 작업하고 있습니다. 프로덕션 환경에서 문제가 발생하면 어떤 스레드가 실행 중인지 (관리 이름으로) 볼 수 있고 일시 중지/종료 할 수 있기를 원합니다.실행중인 .Net 응용 프로그램에서 스레드보기, 일시 중지 및 종료

어쨌든 이것을 달성하려면?

VS는 항상 사용할 수있는 것은 아니지만 (좋은 옵션 임에도 불구하고), WinDbg UI는 라이트에 적합하지 않습니다.

디버깅하는 동안 VS에있는 것처럼 프로그램 내 스레드 창을 고려했지만이를 프로그래밍 방식으로 찾을 수 없습니다. Process.GetThreads는 사용 가능한 데이터를 거의 반환하지 않습니다.

답변

2

.net에는 내장 된 기능이 없습니다. 프로그래밍 방식으로 활성 스레드를 반복하려는 경우 시작시 어딘가에 등록하고 완료시 등록을 취소하거나 처리하기 전에 필터링해야합니다. 우리는이 버전을 만들었지 만 사소한 작업이 필요합니다.

0

가벼운 무게를 원할 경우 관리되는 디버거를 연결하여 스레드를 보거나 고정 시키거나 SOS 확장명으로 WinDbg를 사용할 수 있습니다.

0

ProcessExplorer를 사용하여 프로세스의 실행중인 스레드를 ID 및 상태별로 볼 수 있습니다.

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

사용 "속성"창의 "스레드"탭을 선택합니다.

스레드를 죽이고 스레드 스택을 볼 수도 있습니다.

+0

Process Explorer 16.02에서는 Threads (스레드) 탭 목록에 스레드 이름이 표시되지 않습니다. – Matt

+0

당신이 옳습니다 : 대답을 편집했습니다 – olorin

0

원격 디버깅은 어떻게됩니까? 보안 때문에 설치하기가 약간 까다 롭고 올바른 디버깅 기호를 갖출 수 있습니다.

Remote Debugging Setup

3

찾기 스레드 : Thread.Abort를 사용

using System.Diagnostics; 

ProcessThreadCollection threads = Process.GetCurrentProcess().Threads; 

당신은 일반적으로 관리 죽일 수 스레드(). Sleep, Wait 또는 Join에 있다면 Thread.Interrupt()를 사용하여 도망 갈 수 있습니다.

+0

불행히도, 그것은 System.Thread와 다른 ProcessThread 컬렉션을 반환합니다. 당신이 참조한 메소드는 System.Thread에 있습니다. ProcessThread를 System.Thread로 가져 오는 방법을 모르겠습니다. : - / –

관련 문제