본문으로 바로가기

Source Insight의 막강한 code analysis 기능으로 다른 에디터는 쳐다보지 않았지만, C 코딩 기술하는 방법이 변화되고 C++ 소스를 보게 되는 일이 점점 많아지면서 Source Insight의 한계를 느끼기 시작하였다.


Source Insight의 가장 큰 강점은 바로 code analysis 기능인데, 대용량의 C++ 소스에서는 무용지물에 가깝게 멍청한 기능으로 전락한다. 심지어 같은 파일 내의 변수/함수/클래스 등의 코드 연관 관계를 설정하지 못하여 Alexa 기능을 포팅하면서 정말 코드 분석하기가 힘들었다. code analysis 기능이 마비되다 보니, 디버깅 할 때 항상 전체 검색으로 코드를 찾는 것에 이골이 났다. -.-;;


잠깐 여유가 생겨...

그동안 Python을 공부하면서 잠깐씩 써 본 VSCode로 주력 에디터로 갈아타기로 마음 먹었다. 사실 귀차니즘 때문에 Source Insight에서 다른 에디터로 절대 갈아탈 마음은 없었다. 그런데 C++ 소스를 많이 접하게 되다 보니, 이제는 더 이상 Source Insight에 안주할 수 있는 상황이 아니었다.


VSCode Extension과 GNU Global source code tagging을 사용하면 Source Insight 개발 환경과 비슷하게 구성할 수 있다. Source Insight의 C언어 기준으로 code analysis 기능과 비교했을 때, 다소 미흡하지만, C/C++/Java/Python 모든 개발 환경을 하나의 IDE tool로 사용할 수 있다는 것에 아쉬운 점을 극복할 수 있다고 생각한다. 아래 이미지는 모든 설정을 완료한 VSCode 환경이다.

VSCode에서 보다 나은 개발환경을 구성하기 위해 몇개의 Extension을 설치해야 한다. C/C++/Python 개발에 필요한 Extension을 몇 가지를 설치하였다. Bracket Pair Colorizer 2는 코드 가독성을 화~~악 높여주는 애장 Extension이다.

C/C++ 코딩할 경우 MS에서 제공하는 C/C++ Extension과 C++ Intellisense Extension은 함께 설치해야 한다. 이것만 설치하여도 기본 소스 연관 관계는 설정되나, Source Insight 만큼 code analysis을 원한다면 GNU Global source code tagging system 설치하면 꽤 쓸만한 code analysis 기능을 제공한다.


GNU Global source code taggin system을 사용하려면 global 패키지를 설치해야 한다. global 패키지는 우분투 기본 저장소에 포함되어 있어 간단히 설치할 수 있다.

sudo apt install global

우분투 환경에서 VSCode는 ~/.config/Code 디렉토리에 전역 설정과 프로젝트별 데이터를 저장을 하는데, 프로젝트 소스 코드에 대한 캐쉬 데이터도 포함되고 있어 용량이 무한히 커지는 문제가 있다.


회사에서 개발하는 소스 코드로 프로젝트를 생성하면 약 1.3GB의 캐쉬 데이터가 생성되어 우분투가 설치된 파티션의 용량이 부족한 상황이 발생하여 이것을 방지하고자 VSCode 설정 파일과 프로젝트 캐쉬 데이터 위치를 변경하도록 한다. 공식적으로 VSCode meta data 디렉토리를 변경하는 것을 제공하지 않고 있어, 아래와 같이 link를 생성하여 변경하였다.

VSCode의 장점 중 하나는 다른 IDE tool과는 다르게 에디터의 전역 설정과 프로젝트별 개별 설정을 지원한다.

전역 설정은 ~/.config/Code/User/setting.json 파일로 관리되며, 모든 프로젝트에서 동일하게 설정되는 것을 정리하면 된다. 내가 사용하는 전역 설정은 다음의 파일을 참고하면 된다.

settings.json

프로젝트 개별 설정은 현재 프로젝트에만 설정되는 것으로 소스 코드 인코딩 방식, 배제할 소스를 설정 등을 할 수 있다. 또한 Extension에서 생성하는 캐쉬 데이터의 위치도 아래와 같이 따로 관리가 가능하다. 프로젝트 개별 설정은 proj_dir/.vcode/setting.json 파일에서 관리한다.

{
	"files.encoding":"euckr",
	"files.exclude": {
		"**/buildroot-6.10.0.13":true,
		"**/aliboot-BL3.5.0-20190308":true,
		"**/cdm-wrapper-1.0-20180504":true,
		"**/dts-PDK1.16.0-20190226*":true,
		"**/uboot-BL3.5.0-20190131":true,
		"**/linux-PDK1.16.0-20190319":true,
		"**/aliplatform-1.16.L6.10-20190319/examples":true,
		"**/aliplatform-1.16.L6.10-20190319/tests":true,
		"**/aui-2.6.L6.10-20190319/samples":true,
		"**/aui-2.6.L6.10-20190319/tests":true,
		"**/aui_new_mp-4.0.5":true,
		"**/gstreamer1/gstreamer-1.12.2/gstreamer-1.12.2/tests":true,
		"**/gstreamer1/gst-plugins-bad-1.12.2/gst-plugins-bad-1.12.2/tests":true,
		"**/gstreamer1/gst-plugins-base-1.12.2/gst-plugins-base-1.12.2/tests":true,
		"**/gstreamer1/gst-plugins-good-1.12.2/gst-plugins-good-1.12.2/tests":true,
		"**/source/handan_packages/config/alisee":true,
		"**/source/handan_packages/config/patches":true,
		"**/source/handan_packages/config/postbuild":true,
		"**/source/handan_packages/config/handan/cfg/rootfs":true,
		"**/source/handan_packages/source/modules/libsz":true,
		"**/source/handan_packages/source/thirdparty/alexa/avs-device-sdk-master_v1.13":true,
		"**/source/handan_packages/source/thirdparty/gp*":true,
		"**/source/handan_packages/source/thirdparty/vsclib":true,
		"**/source/handan_packages/source/thirdparty/nfbnx3_sdk_20190312":true,
		"**/source/handan_packages/source/thirdparty/widevine":true,
		"**/source/handan_packages/source/thirdparty/wifi_drv":true,
		"**/source/handan_packages/source/tools/htool":true,
		"**/source/handan_packages/z_model":true,
		"**/target":true,
	},
	// "C_Cpp.dimInactiveRegions": false,
	// "C_Cpp.errorSquiggles": "Disabled",
	"C_Cpp.intelliSenseCachePath": "${workspaceFolder}/.vscode/cpptools"
}

VSCode는 통합 개발 환경이기 때문에 build system도 제공하지만, Embedded 환경에서 개발하기 때문에 toolchain 설정이나 이런 것들이 번거로워 build 환경은 구성하지 않았다. 하지만, 에디터에서 header 누락으로 경고 메시지를 많이 발생하는 관계로, include Path를 설정하여 경고 메시지를 제거할 수 있다. build 환경은 proj_dir/.vscode/c_cpp_properties.json 파일에서 관리한다.

{
	"configurations": [
		{
			"name": "Linux",
			"includePath": [
				"${workspaceFolder}/**",
				"${workspaceFolder}/buildroot-6.10.0.13/output/staging/usr/include/**",
				"${workspaceFolder}/buildroot-6.10.0.13/output/staging/usr/include/directfb",
				"${workspaceFolder}/buildroot-6.10.0.13/output/staging/usr/include/glib-2.0",
				"${workspaceFolder}/buildroot-6.10.0.13/output/staging/usr/include/gstreamer-1.0",
				"${workspaceFolder}/buildroot-6.10.0.13/output/staging/usr/include/ali_common",
				"${workspaceFolder}/buildroot-6.10.0.13/output/staging/usr/include/aliplatform",
				"${workspaceFolder}/buildroot-6.10.0.13/output/staging/usr/include/alihld-sl/inc",
				"${workspaceFolder}/buildroot-6.10.0.13/output/staging/usr/lib/glib-2.0/include"
			],
			"defines": [
				"USE_GLIB244",
				"USE_HANDAN_MODIFIED",
				"PORTAUDIO",
				"USE_HANDAN_IPC", 
				"GSTREAMER_MEDIA_PLAYER"
			],
			"compilerPath": "/usr/bin/gcc",
			"cStandard": "c11",
			"cppStandard": "c++17",
			"intelliSenseMode": "clang-x64"
		}
	],
	"version": 4
}

include Path는 소스 코드에서 문제가 발생할 경우 추가하면 된다. GNU Global source code tagging system를 사용하여 소스 코드 연관 관계를 설정하여 보다 편하게 VSCode에서 개발할 수 있다.


내가 개발하는 소스 코드의 gtags 설정은 아래와 같이하였다. 아래와 같이 필요한 소스 디렉토를 추가/삭제하면 된다.

find \
	source/gstreamer1 \
	source/aui-2.6.L6.10-20190319 \
	source/aliplatform-1.16.L6.10-20190319 \
	source/linux-PDK1.16.0-20190319 \
	source/handan_packages/source/modules/hdaemon \
	source/handan_packages/source/modules/hmain/common \
	source/handan_packages/source/modules/libsz_liberty09 \
	source/handan_packages/source/thirdparty/nfbnx3_sdk_20190312 \
	source/handan_packages/source/thirdparty/alexa/avs-device-sdk-master \
 	-name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" -type f | grep -v dummy | grep -v win | gtags -f -

GNU Global source code tagging system이 설치되어 있을 경우, VSCode는 백그라운드에서 source tagging 이루어지기 때문에 gtags 명렁어로 tagging 파일을 따로 생성할 필요가 없다.

trouble shooting

VSCode 버그인지 모르겠지만, 개별 프로젝트 디렉토리에 link가 존재할 경우 source reference 결과가 항상 2개씩 link가 포함된 경로와 절대 경로로 2개씩 출력된다. 아래와 이미지와 같이 Home directory에 proj 경로를 link을 생성하여 보다 빠르게 working 디렉토리 가도록 하였다.

이것이 VSCode에선 코드 연관 관계에서 2개로 출력되어, 동일 파일임에도 불구하고 다른 디렉토리의 파일로 인식하는 문제가 발생한다. 동일 파일인데도 다른 파일처럼 새롭게 열리기 때문에 이런 상태로 VSCode를 사용할 수 없었다.


이 문제는 프로젝트 생성 시(Ctrl + K / Ctrl + O), 프로젝트 디렉토리를 절대 경로로 접근하여 생성하면 이런 문제가 발생하지 않는 것을 확인하였다. 즉, VSCode로 작업할 때에는 절대 link 경로를 포함하지 말아야 한다.

'개발일기 > 작업일지' 카테고리의 다른 글

VSCode 대용량 C/C++ 개발환경 설정  (0) 2019.08.16
플래시 문제점 검토  (0) 2018.01.23
아오... 이 황당함은 뭐지...  (0) 2018.01.18
부트로더, 공유 라이브러 정리  (0) 2018.01.17
VMX 포팅중... -8-  (0) 2018.01.02
VMX 포팅중... -7-  (0) 2017.12.21

댓글을 달아 주세요