ICorProfilerInfo
인터페이스를 사용하여 CLR 프로파일 러를 작성하고 있습니다.GetFunctionInfo를 사용하여 FunctionID에서 함수 이름 가져 오기
SetEnterLeaveFunctionHooks
을 사용하는 경우 콜백 메서드는 FunctionID
으로 전달됩니다.
주어진 기능의 메타 데이터 (예 : 특히 이름 뒤에 있음)를 얻으려면 어떻게해야합니까? FunctionID
?
MSDN 문서에 따르면 첫 번째 호출은 GetFunctionInfo
이어야합니다. 이 함수의 documentation 상태 :
프로파일 러 코드가 소정 모듈에 대한 메타 데이터 인터페이스를 얻었다 ICorProfilerInfo :: GetModuleMetaData를 호출 할 수있다. pToken이 참조하는 위치로 리턴 된 메타 데이터 토큰을 사용하여 함수의 메타 데이터에 액세스 할 수 있습니다.
마지막 문장 ('메타 데이터 토큰 ... 함수의 메타 데이터에 액세스하는 데 사용할 수 있음')에 대해 자세히 설명하지 않습니다. 어떻게 작동합니까?
이mdToken ptkResolutionScope;
WCHAR szName[1024];
ULONG cchName = 1024;
ULONG pchName;
HRESULT result = MetaDataImport->GetTypeRefProps(pToken, &ptkResolutionScope, szName, cchName, &pchName);
마지막 호출이 S_FALSE
을 반환하고 szName
을 채우지 않습니다 :
void MyProfiler::EnterMethod(FunctionID functionID)
{
ClassID classId = 0;
ModuleID moduleId = 0;
mdToken metaDataToken = 0;
IMetaDataImport* metaDataImport = NULL;
// (m_info is ICorProfilerInfo3)
m_info->GetFunctionInfo(functionID, &classId, &moduleId, &metaDataToken);
m_info->GetModuleMetaData(moduleId, ofRead, IID_IMetaDataImport, (IUnknown**)&metaDataImport);
// What goes here?
}
이 같은 GetTypeRefProps
전화를 시도 :
지금까지, 나는 다음을 수행하고있다.