성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>마이크로소프트의 CoreCLR 프로파일러 예제 빌드 방법</h1> <p> CoreCLR 용 프로파일 예제가 github에 공개되어 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Microsoft/clr-samples ; <a target='tab' href='https://github.com/Microsoft/clr-samples'>https://github.com/Microsoft/clr-samples</a> clr-samples/ProfilingAPI/ReJITEnterLeaveHooks/ ; <a target='tab' href='https://github.com/Microsoft/clr-samples/tree/master/ProfilingAPI/ReJITEnterLeaveHooks'>https://github.com/Microsoft/clr-samples/tree/master/ProfilingAPI/ReJITEnterLeaveHooks</a> </pre> <br /> 물론, 빌드하는 방법이 "<a target='tab' href='https://github.com/Microsoft/clr-samples/tree/master/ProfilingAPI/ReJITEnterLeaveHooks'>clr-samples/ProfilingAPI/ReJITEnterLeaveHooks/</a>" 문서에도 나오지만 그래도 정리를 해보겠습니다. ^^<br /> <br /> 우선, 당연히 Visual Studio 2017은 있어야 합니다. 그런 다음 CoreCLR을 clone합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > dotnet/coreclr ; <a target='tab' href='https://github.com/dotnet/coreclr'>https://github.com/dotnet/coreclr</a> </pre> <br /> 부담 갖지 않아도 됩니다. ^^ 단지 include 파일만 필요하기 때문에 빌드까지 할 필요는 없습니다. 그런 다음 cmd.exe 창을 띄우고 다음과 같이 환경 변수를 설정합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > SET CORECLR_PATH=...[coreclr 폴더]... SET BuildOS=Windows_NT SET BuildArch=...[원하는 플랫폼]... SET BuildType=...[Debug or Release]... SET Output=...[빌드 후 생성되는 DLL 파일명]... </pre> <br /> 가령, clone한 coreclr 폴더가 E:\git_clone\coreclr이고, x64/Debug 모드로 빌드하고 싶다면 다음과 같은 식으로 설정하면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > SET CORECLR_PATH=E:\git_clone\coreclr SET BuildOS=Windows_NT SET BuildArch=x64 SET BuildType=Debug SET Output=ClrProfiler.dll </pre> <br /> 이걸로 준비 작업은 모두 끝입니다. 이후에는 그냥 ./build.cmd 파일을 실행하면 깨끗하게 빌드가 완료됩니다.<br /> <br /> 참고로, 다음과 같이 .csproj 프로젝트 파일 내에 IncludePath를 통해 위에서 설정한 환경 변수의 값에 따라 include 경로가 결정됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <LinkIncremental>true</LinkIncremental> <IncludePath>$(VC_IncludePath);<span style='color: blue; font-weight: bold'>$(CORECLR_PATH)</span>\src\pal\prebuilt\inc;$(CORECLR_PATH)\src\inc;<span style='color: blue; font-weight: bold'>$(CORECLR_PATH)</span>\bin\Product\<span style='color: blue; font-weight: bold'>$(BuildOS).$(BuildArch).$(BuildType)</span>\inc;$(NETFXSDKDir)Include\um;$(WindowsSDK_IncludePath);</IncludePath> </PropertyGroup> </pre> <br /> <hr style='width: 50%' /><br /> <br /> 그래도 역시 디버깅이 가능한 Visual Studio 2017 내에서 빌드하는 것이 좋습니다. ^^ 이를 위해 명령행 창에서 SET... 환경 변수를 지정한 후 devenv.exe를 실행해야 합니다. 그렇게 실행된 Visual Studio 2017의 경우 환경 변수를 cmd.exe로부터 물려받기 때문에 정상적으로 빌드가 가능합니다.<br /> <br /> 만약 매번 명령행 창에 SET ... 환경 변수를 적용해서 devenv.exe를 실행하는 것이 귀찮다면 별도로 런처용 .bat를 만들던가, 아니면 전역 환경 변수로 적용하시면 됩니다. 참고로 런처용 .bat를 만든다면 다음의 글에 따라,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Visual Studio(devenv.exe)를 배치 파일(.bat)을 통해 실행하는 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11293'>http://www.sysnet.pe.kr/2/0/11293</a> </pre> <br /> 이렇게 구성해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > REM dev_coreclr.bat SET CORECLR_PATH=E:\git_clone\coreclr SET BuildOS=Windows_NT SET BuildArch=x64 SET BuildType=Debug SET Output=ClrProfiler.dll start "" "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe" </pre> <br /> <hr style='width: 50%' /><br /> <br /> 만약, SET ... 환경 변수를 설정하지 않고 Visual Studio에서 ClrProfiler.sln을 올려 곧바로 빌드하면 다음과 같은 컴파일 에러가 발생합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 1>------ Rebuild All started: Project: ClrProfiler, Configuration: Debug Win32 ------ 1> ILRewriter.cpp 1>c:\program files (x86)\windows kits\8.1\include\um\corhdr.h(1849): error C2220: warning treated as error - no 'object' file generated 1>c:\program files (x86)\windows kits\8.1\include\um\corhdr.h(1849): warning C4091: 'typedef ': ignored on left of 'NGenHintEnum' when no variable is declared 1>c:\program files (x86)\windows kits\8.1\include\um\corhdr.h(1858): warning C4091: 'typedef ': ignored on left of 'LoadHintEnum' when no variable is declared 1>c:\program files (x86)\windows kits\8.1\include\um\corhdr.h(1907): warning C4091: 'typedef ': ignored on left of 'NativeTypeArrayFlags' when no variable is declared 1> CorProfiler.cpp 1>c:\program files (x86)\windows kits\8.1\include\um\corhdr.h(1849): error C2220: warning treated as error - no 'object' file generated 1>c:\program files (x86)\windows kits\8.1\include\um\corhdr.h(1849): warning C4091: 'typedef ': ignored on left of 'NGenHintEnum' when no variable is declared 1>c:\program files (x86)\windows kits\8.1\include\um\corhdr.h(1858): warning C4091: 'typedef ': ignored on left of 'LoadHintEnum' when no variable is declared 1>c:\program files (x86)\windows kits\8.1\include\um\corhdr.h(1907): warning C4091: 'typedef ': ignored on left of 'NativeTypeArrayFlags' when no variable is declared 1>e:\git_clone\clr-samples\profilingapi\rejitenterleavehooks\corprofiler.h(11): error C2504: 'ICorProfilerCallback8': base class undefined 1>e:\git_clone\clr-samples\profilingapi\rejitenterleavehooks\corprofiler.h(14): error C2143: syntax error: missing ';' before '*' 1>e:\git_clone\clr-samples\profilingapi\rejitenterleavehooks\corprofiler.h(14): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>e:\git_clone\clr-samples\profilingapi\rejitenterleavehooks\corprofiler.h(14): error C2238: unexpected token(s) preceding ';' </pre> <br /> 왜냐하면, CLR 관련 헤더 파일들이 기본적으로 Windows SDK에 포함된 것을 가져오게 되는데 아쉽게도 현재(2017-09-04) ICorProfilerCallback8 인터페이스 같은 것들은 포함하고 있지 않기 때문에 컴파일이 안됩니다. 이러한 최신 인터페이스들은 CoreClr 관련 헤더 파일에만 정의되어 있습니다. (아마도, 언젠가 Windows SDK에도 ICorProfilerCallback8이 포함되지 않을까요?!)<br /> <br /> <hr style='width: 50%' /><br /> <br /> 빌드 후 테스트하는 것도 간단합니다. 다음과 같이 프로파일러의 존재를 알리는 환경 변수를 설정하고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > SET CORECLR_PROFILER={cf0d821e-299b-5307-a3d8-b283c03916dd} SET CORECLR_ENABLE_PROFILING=1 SET CORECLR_PROFILER_PATH=C:\filePath\to\ClrProfiler.dll </pre> <br /> 그대로 dotnet.exe 등의 .NET Core 실행 파일을 직접 구동하면 됩니다.<br /> <br /> 마찬가지로, Visual Studio 2017 내에서 직접 F5 디버깅 환경을 구성하고 싶다면 아래의 글에서처럼 C++ 프로젝트 설정에 환경 변수 설정과 실행될 EXE 환경을 구성해 주시면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 디버깅 방법 - CLR 프로파일러 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/258'>http://www.sysnet.pe.kr/2/0/258</a> </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
7047
(왼쪽의 숫자를 입력해야 합니다.)