닷넷 프로파일러의 오류 코드 정보
오픈 소스가 좋긴 좋군요. ^^
.NET Profiler 관련해서 ICorProfilerInfo4 인터페이스의 메서드를 호출하는 데 HRESULT 반환값이 0x8013137B로 나왔습니다. 깜깜하군요. ^^;
그런데, 검색해 보니 github에 공개된 CoreCLR 소스코드의 XML 문서에,
CoreCLR
; https://github.com/dotnet/coreclr/blob/master/src/inc/corerror.xml
다음의 설명이 있습니다.
<HRESULT NumericValue="0x8013137B">
<SymbolicName>CORPROF_E_CALLBACK4_REQUIRED</SymbolicName>
<Comment> Profiler must implement ICorProfilerCallback4 interface for this call to be supported. </Comment>
</HRESULT>
그렇습니다. 프로파일러 측에서 ICorProfilerCallback4 인터페이스를 구현하지 않았다고 설명해주니 문제를 빠르게 인지할 수 있었습니다. 하다 보니, 0x80131363 오류 코드도 만나게 되었는데요, 마찬가지로 해당 문서를 보면,
<HRESULT NumericValue="0x80131363">
<SymbolicName>CORPROF_E_UNSUPPORTED_CALL_SEQUENCE</SymbolicName>
<Comment> A call was made at an unsupported time. Examples include illegally calling a profiling API method asynchronously, calling a method that might trigger a GC at an unsafe time, and calling a method at a time that could cause locks to be taken out of order. </Comment>
</HRESULT>
원인은, C# 코드에서 P/Invoke를 통해 닷넷 프로파일러의 ICorProfilerInfo4의 메서드를 호출했기 때문입니다. (해당 메서드는 절대로 닷넷측의 콜스택 상에서 호출되어서는 안됩니다.)
이 정도면 엄청 상세한 오류 설명입니다. ^^ 닷넷 프로파일러 만드시는 분들은 github의 CoreCLR (소스 코드까지는 아니더라도) 내부 오류 코드 설명을 꼭 참조하시기 바랍니다. ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]