Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)

마이크로소프트의 CoreCLR 프로파일러 예제를 Visual Studio CMake로 빌드하는 방법

지난 글에서,

마이크로소프트의 CoreCLR 프로파일러 예제 빌드 방법
; https://www.sysnet.pe.kr/2/0/11294

단순히 리눅스 운영체제 상에서 CoreCLR 프로파일러를 빌드해 봤습니다. 문제는, 제가 비주얼 스튜디오의 디버깅 환경에 익숙하다는 점입니다. ^^ 그래서 다음의 경험을 살려,

Visual Studio 2019 - CMake를 이용한 공유/실행(so/out) 리눅스 프로젝트 설정
; https://www.sysnet.pe.kr/2/0/11833

프로파일러 예제를 Visual Studio CMake 프로젝트로 옮겨 봤습니다.

이를 위해 우선 coreclr과 clr-samples repo를 clone해 두어야 합니다.

E:\git_clone\coreclr
E:\git_clone\clr-samples

사실 clr-samples에서는 coreclr의 헤더 파일만 필요하기 때문에 ./coreclr 하위에 있는 다음의 폴더를,

./src/pal/inc/rt 
./src/pal/prebuilt/inc 
./src/pal/inc 
./src/inc 
./src/md/inc

"E:\git_clone\clr-samples\ProfilingAPI\ReJITEnterLeaveHooks\cor" 폴더로 복사해 둡니다. (따라서 더 이상은 e:\git_clone\coreclr 폴더가 필요 없습니다.)

그다음, "E:\git_clone\clr-samples\ProfilingAPI\ReJITEnterLeaveHooks" 경로로 이동해 해당 폴더에 다음의 내용을 담은 CMakeLists.txt를 만듭니다.

cmake_minimum_required(VERSION 3.9)
project (CorProfiler)

set (SRC_FILES ClassFactory.cpp CorProfiler.cpp dllmain.cpp ILRewriter.cpp )

add_library( CorProfiler.so SHARED ${SRC_FILES} )

이제 원래의 clang++로 빌드하는 build.sh 파일의 내용을 반영해야 하는데요.

#!/bin/sh

[ -z "${CORECLR_PATH:-}" ] && CORECLR_PATH=~/coreclr
[ -z "${BuildOS:-}"      ] && BuildOS=Linux
[ -z "${BuildArch:-}"    ] && BuildArch=x64
[ -z "${BuildType:-}"    ] && BuildType=Debug
[ -z "${Output:-}"       ] && Output=CorProfiler.so

printf '  CORECLR_PATH : %s\n' "$CORECLR_PATH"
printf '  BuildOS      : %s\n' "$BuildOS"
printf '  BuildArch    : %s\n' "$BuildArch"
printf '  BuildType    : %s\n' "$BuildType"

printf '  Building %s ... ' "$Output"

CXX_FLAGS="$CXX_FLAGS --no-undefined -Wno-invalid-noreturn -fPIC -fms-extensions -DBIT64 -DPAL_STDCPP_COMPAT -DPLATFORM_UNIX -std=c++11"
INCLUDES="-I $CORECLR_PATH/src/pal/inc/rt -I $CORECLR_PATH/src/pal/prebuilt/inc -I $CORECLR_PATH/src/pal/inc -I $CORECLR_PATH/src/inc -I$

clang++ -shared -o $Output $CXX_FLAGS $INCLUDES ClassFactory.cpp CorProfiler.cpp dllmain.cpp ILRewriter.cpp

printf 'Done.\n'

CMakefile.txt에는 다음과 같이 몇몇 환경 변수를 설정해 주고,

cmake_minimum_required(VERSION 3.9)
project (CorProfiler)

set (SRC_FILES ClassFactory.cpp CorProfiler.cpp dllmain.cpp ILRewriter.cpp)

set (ENV{BuildOS} Linux)
set (ENV{BuildArch} x64)
set (ENV{BuildType} Debug)
set (ENV{Output} CorProfiler.so)


SET ( CMAKE_CXX_FLAGS_DEBUG " -Wno-pragma-pack -Wno-undef -Wno-invalid-noreturn -fPIC -fms-extensions -DBIT64 -DPAL_STDCPP_COMPAT -DPLATFORM_UNIX -std=c++11" )
SET ( CMAKE_CXX_FLAGS_RELEASE " -Wno-pragma-pack -Wno-undef -Wno-invalid-noreturn -fPIC -fms-extensions -DBIT64 -DPAL_STDCPP_COMPAT -DPLATFORM_UNIX -std=c++11" )

INCLUDE_DIRECTORIES ( ./cor/src/pal/inc/rt ./cor/src/pal/prebuilt/inc ./cor/src/pal/inc ./cor/src/inc )

add_library( CorProfiler.so SHARED ${SRC_FILES} )

마지막으로 clang++로 변경하는 작업을 아래의 글에 따라

Visual Studio 2019 - CMake의 컴파일러를 기본 g++에서 clang++로 변경
; https://www.sysnet.pe.kr/2/0/11841

CMakeSettings.json에 설정하면 됩니다.

(첨부한 프로젝트는 그렇게 구성한 것입니다. 첨부 파일로 CMake 빌드를 하고 싶다면 CMakeSettings.json의 remoteMachineName 인증 정보만 적절하게 구성하면 ReJITEnterLeaveHooks 프로젝트를 바로 빌드할 수 있습니다.)




그런데 아쉽게도, CMake로 변경한 당초의 취지에 맞지 않게 이 프로젝트에 대한 F5 디버깅을 할 수가 없습니다. 해보면 다음과 같은 식의 오류 메시지 창이 뜨는데요.

Unable to start debugging. The startup project could not be launched.

그러니까, so 공유 모듈이기 때문에 디버깅을 위해 원격 리눅스 머신의 시작 프로세스를 지정할 수 있어야 하지만 비주얼 스튜디오의 CMake 환경에서는 이게 안 되는 것입니다. ^^; 툴 바에 보면 "Select Startup Item..."이 있는 걸로 봐서 지원을 할 수도 있을 것 같은데... 암튼 제가 그 방법을 모르겠습니다. 음... 그러니까 일단 CMake 프로젝트로는 비주얼 스튜디오 상에서 CLR Profiler 같은 식의 공유 프로젝트를 F5 디버깅할 수는 없습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 5/3/2019]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2019-03-26 12시12분
마이크로소프트의 CoreCLR 프로파일러 리눅스 예제를 Visual Studio F5 원격 디버깅하는 방법
; http://www.sysnet.pe.kr/2/0/11856

정성태

... 106  107  108  109  110  111  112  [113]  114  115  116  117  118  119  120  ...
NoWriterDateCnt.TitleFile(s)
11100정성태11/7/201628818개발 환경 구성: 304. Wi-Fi Direct 지원 여부 확인 방법 [1]
11099정성태11/7/201630752.NET Framework: 620. C#에서 C/C++ 함수로 콜백 함수를 전달하는 예제 코드파일 다운로드1
11098정성태11/7/201620093오류 유형: 368. 빌드 이벤트에서 robocopy 사용 시 $(TargetDir) 매크로를 지정하는 경우 오류 발생
11097정성태11/7/201623026오류 유형: 367. go install: no install location for directory [...경로...] outside GOPATH
11096정성태11/6/201626823디버깅 기술: 83. PDB 파일을 수동으로 다운로드하는 방법
11095정성태11/6/201623090.NET Framework: 619. C# - Cognitive Services 중의 하나인 Face API를 사용해 얼굴 인식 및 흐림(blur) 효과 적용 [1]파일 다운로드1
11094정성태11/5/201624717VC++: 105. Visual Studio 2013/2015 - Ceemple OpenCV 확장을 이용한 웹캠 영상 출력
11093정성태11/4/201624651웹: 34. Edge 브라우저도 지원하는 클립보드 복사를 위한 자바스크립트 코드
11092정성태11/3/201631598.NET Framework: 618. C# - NAudio를 이용한 MP3 파일 재생 [5]파일 다운로드1
11091정성태11/3/201626318VC++: 104. std::call_once를 이용해 thread-safe한 Singleton 객체 생성파일 다운로드1
11090정성태11/1/201627781VC++: 103. C++ CreateTimerQueue, CreateTimerQueueTimer 예제 코드 [9]파일 다운로드1
11089정성태11/1/201626705디버깅 기술: 82. Windows 10을 위한 Symbol(PDB) 파일 내려받는 방법 [2]
11088정성태11/1/201630779.NET Framework: 617. C# - AForge.NET을 이용한 MP4 동영상 파일 재생 [7]파일 다운로드1
11087정성태11/1/201625196.NET Framework: 616. AForge.Video.FFMPEG를 최신 버전의 ffmpeg 파일로 의존성을 변경하는 방법파일 다운로드1
11086정성태11/1/201619047오류 유형: 366. The Microsoft Passport Container service terminated with the following error: General access denied error
11085정성태10/27/201633445.NET Framework: 615. C# - AForge.NET을 이용한 웹캠 영상 출력 [2]파일 다운로드1
11084정성태10/26/201621408오류 유형: 365. The User Profile Service service failed to the sign-in.
11083정성태10/26/201627956Windows: 131. 윈도우 10에서 사라진 "Adapters and Bindings" 네트워크 우선 순위 조정 기능 [1]
11082정성태10/26/201629885.NET Framework: 614. C# - DateTime.Ticks의 정밀도 [4]파일 다운로드1
11081정성태10/26/201620385오류 유형: 364. You need to fix your Microsoft Account for apps on your other devices to be able to launch apps and continue experiences on this device.
11080정성태10/24/201623541Windows: 130. Windows Server 2016 Nano 서버 설치 방법
11079정성태10/21/201620675Windows: 129. Windows Server 2016 설치 CD에 있는 Convert-WindowsImage.ps1 사용 방법 정리
11078정성태10/21/201621983Windows: 128. Windows Server 2016 Nano 서버 VHD 이미지 만드는 방법 - TP5 기준
11077정성태10/21/201620478오류 유형: 363. Active Directory 서버의 NETLOGON 서비스가 멈췄을 때 발생하는 문제
11076정성태10/21/201620078오류 유형: 362. 윈도우 백업 시 오류 - 0x80780040
11075정성태10/20/201621002Windows: 127. Convert-WindowsImage.ps1 사용 방법 정리
... 106  107  108  109  110  111  112  [113]  114  115  116  117  118  119  120  ...