2011-11-26 2 views
2

Profiling API ICofProfilerInfo 또는 IMetadataImport 인터페이스를 사용하여 관리되는 스레드의 System.Thread.ThreadState 속성을 읽는 방법이 있습니까? 또는 관리되지 않는 코드의 다른 방법? 이 같은프로파일 링 API (ICofProfilerInfo 또는 기타 IMetadataImport 또는 기타 방법)로 System.Threading.Thread.ThreadState를 읽는 방법

예를 들어 뭔가 :

ICorProfilerInfo3 pProfilerInfo = ...; 
ThreadID threadId; 
pProfilerInfo->GetCurrentThreadID(&threadId); 
ThreadState threadState; 
pSomethingWhatINeed->GetManagedTheadState(threadId, &threadState); 
if(threadState == THREADSTATE_WAIT_JOIN_SLEEP){ 
    //do something 
} 

답변

3

당신은 당신이 GetThread를 호출하여 ICorDebugThread을 얻을 수있는 ICorDebugProcess를 얻을 수 ICorDebug.GetProcess를 사용할 수 있습니다. 그런 다음 GetUserState으로 전화하여 CorDebugUserState을 얻으십시오. ICorDebug 디버거를 사용할 때와 debugee는 다른 프로세스가되어야합니다.

+0

위대한 아이디어와 유용한 힌트이지만 ICorProfiler를 많이 사용하는 프로세스에서이 정보를 얻을 필요가 있습니다. – Honzajscz

+1

내 원래의 대답이 충분하지 않았던 것 같아요. 편집했습니다. ICorDebug와 ICorProfiler를 다른 프로세스의 한 프로세스에서 동시에 사용할 수 있습니다. 내 요점은 프로세스가 ICorDebug를 사용하여 자체 디버깅을 할 수 없다는 것입니다 (ICorProfiler와는 달리 - 프로세스가 자체 프로파일 러일 수 있음). – MagnatLU

관련 문제