CLIEN

본문 바로가기 메뉴 바로가기 보기설정 테마설정
톺아보기 공감글
커뮤니티 커뮤니티전체 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 ·굴러간당 ·아이포니앙 ·주식한당 ·방탄소년당 ·일본산당 ·MaClien ·개발한당 ·자전거당 ·AI당 ·이륜차당 ·안드로메당 ·소시당 ·콘솔한당 ·소셜게임한당 ·바다건너당 ·물고기당 ·키보드당 ·VR당 ·노젓는당 ·ADHD당 ·창업한당 ·나혼자산당 ·PC튜닝한당 ·테니스친당 ·갖고다닌당 ·육아당 ·골프당 ·클다방 ·냐옹이당 ·어학당 ·레고당 ·방송한당 ·라즈베리파이당 ·달린당 ·여행을떠난당 ·IoT당 ·나스당 ·3D메이킹 ·X세대당 ·AI그림당 ·날아간당 ·사과시계당 ·배드민턴당 ·야구당 ·농구당 ·블랙베리당 ·곰돌이당 ·비어있당 ·FM당구당 ·블록체인당 ·보드게임당 ·활자중독당 ·볼링친당 ·캠핑간당 ·문명하셨당 ·클래시앙 ·요리한당 ·쿠키런당 ·대구당 ·DANGER당 ·뚝딱뚝당 ·디아블로당 ·개판이당 ·동숲한당 ·날아올랑 ·전기자전거당 ·e북본당 ·이브한당 ·패셔니앙 ·도시어부당 ·FM한당 ·맛있겠당 ·포뮬러당 ·젬워한당 ·걸그룹당 ·안경쓴당 ·차턴당 ·총쏜당 ·땀흘린당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·KARA당 ·꼬들한당 ·덕질한당 ·가죽당 ·리눅서당 ·LOLien ·Mabinogien ·임시소모임 ·미드당 ·밀리터리당 ·땅판당 ·헌팅한당 ·오른당 ·영화본당 ·MTG한당 ·소리당 ·노키앙 ·적는당 ·찰칵찍당 ·그림그린당 ·소풍간당 ·심는당 ·패스오브엑자일당 ·품앱이당 ·리듬탄당 ·Sea마당 ·SimSim하당 ·심야식당 ·윈태블릿당 ·미끄러진당 ·축구당 ·스타한당 ·스팀한당 ·파도탄당 ·퐁당퐁당 ·테스트당 ·빨콩이당 ·공대시계당 ·터치패드당 ·트윗당 ·가상화폐당 ·시계찬당 ·WebOs당 ·위스키당 ·와인마신당 ·WOW당 ·윈폰이당
임시소모임
고객지원
  • 게시물 삭제 요청
  • 불법촬영물등 신고
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
© CLIEN.NET
공지[점검] 잠시후 서비스 점검을 위해 약 30분간 접속이 차단됩니다. (금일 18:15 ~ 18:45)

사용기

서비스/SW 임베디드 개발자의 vscode + c/cpp extention 사용기 17

11
2020-12-30 21:49:27 수정일 : 2020-12-30 22:04:17 110.♡.176.20
NeverEnd

이번에 커널을 손대면서, vscode를 사용한 이야기를 조금 해볼까 합니다.


리눅스 커널은 처음 2.4시절 부터 만지다가 한동안 만지지 않고 있었는데, 오랜만에 보니 많은 부분이 바뀌기도 했고, 파악할 부분이 많기도 하더군요.

편집기도, 주로 vim + ctags/cscope를 쓰고 있었는데, 예전에 이렇게 써서 이렇게 쓰긴하는데, 왜 굳이 이렇게 귀찮게 써야 하는가 라는 생각이 들기 시작 했습니다.

vim plugin이야 vundle로 쓰고, 자동완성은 clangd plugin 쓰면 되겠지만, 플러그인 설정 부터, 프로젝트 설정까지 하려니깐 귀찮기도 하고, 그렇게 해봐야 원하는 기능이 잘 동작하지도 않습니다.

그게 귀찮으면, source insight 쓰면 되겠지만, 소스 심볼 검색 능력이 썩 맘에 들지도 않아서, 그동안 주력으로 쓰지고 않았습니다.


기존에 쓰는 툴을 가지고 썼을때 맘에 들지 않는 부분여러가지가 있는데, 심볼을 찾는데, 문맥에 상관없이 이름만 같으면 다 찾아줘 버린다는 것도 맘에 안들고, 편집기에서 defconfig를 전혀 이해를 못한다는 것이 제일 맘에 들지 않았습니다. (이것도 youcompleteme를 쓰면 되긴 합니다.)


이게 어떤 상황이냐면, 예를 들어 지금 관심을 가지고 있는 부분이 ftrace인데, 소스를 찬찬히 보고 있습니다. 근데, 컴파일 옵션에서 

CONFIG_FUNCTION_GRAPH_TRACER 을 제거하면 visual studio 같은 IDE라면, 이 config로 감싸져 있는 define 부분은 inactive 되어 dead code임을 알 수 있습니만, vim 이나 source insight 같은 툴은 잘 인식하지도 못합니다. 정확히는 할 수는 있는데 편하지는 않습니다.

잘못된 형식의 이미지 링크입니다.


위의 그림처럼 config를 뺐을때, 에디터에서도 확인이 가능 했으면 좋겠다라는 생각을 하고 있었습니다.

잘못된 형식의 이미지 링크입니다.

요렇게 말이죠... 최신의 IDE라면 당연히 지원되는 기능인데, 안될리가 없다라는 생각에 방법을 찾기 시작 합니다.


다행이도, vscode의 c/c++ plugin이 기본적으로 cmake기반의 프로젝트만 뿐만이 아니라, compile_command.json기반의 프로젝트도 지원하는 것을 알게 되었습니다. 그렇다면, kernel같은 프로젝트도 cmake로 변환하지 않더라도, intellisense에 어떤 compiler flag이나 definition을 각 파일별로 지정 할 수 있다는 것을 의미 하게 됩니다.


요렇게 에디터에서 매크로가 어떻게 확장이 되는지 말이죠. 참고로 KBUILD_MODNAME은 각 모듈별로 다르게 지정 됩니다.

잘못된 형식의 이미지 링크입니다.


내가 이런 생각을 하고 있으면, 누군가 이런 생각을 가지고 있는 사람이 있을꺼다 라고 생각을 했는데, 역시나, github에 helper를 만들어 놓은 사람이 있습니다.


VS Code로 리눅스 커널개발, 갓MS : 클리앙 (clien.net)


이제 python script를 가지고, 설정을 해봤더니, 잘되긴 하는데 뭔가 아쉽습니다.

intellisense가 compile_command와는 뭔가 따로 놉니다. 나는 분명이 compile_command로 프로젝트 설정을 했는데, 자꾸 필요도 없는 소스를 파싱 합니다. 예를 들어 지금 raspberrypi 커널이나 arm64만 보면 되는데, x86이나 sparc도 파싱해댑니다. 이러면서, 메모리 폭발 하고, 심볼 검색도 쓸데 없는게 자꾸 튀어 나옵니다. 게다가 결정적으로 인덱싱을 12시간씩 해대는데, 도저히 참을 수가 없습니다.


그래서, setting을 좀 손보기 시작합니다. file exclude를 지정해서, 쓰지 않는 폴더는 검색하지 않도록 하고, 검색 옵션도 조금 바꿉니다.

이제야 원하는대로 심볼 검색이 되고, 굳이 쓸데 없이 많은 결과물로 눈 필터링 할 필요더 없어 집니다.


이쯤 되고나니깐 조금 욕심이 나서, 빌드, 디버깅 환경도 손을 보게 됩니다.

IDE면 당연히 빌드로 되고, 디버깅이 되야 하는데, 이게 뭔가 싶어서, 빌드와 디버깅도 넣어봅니다.

잘못된 형식의 이미지 링크입니다.


빌드 결과는 터미널 창에 출력이 되고, 워닝과 에러는 문제 pane에 출력이 됩니다. 당연히 소스파일의 위치와 에러 메시지가 함께 출력이 됩니다.

잘못된 형식의 이미지 링크입니다.


디버깅도 launch.json에 지정하면, vscode내에서 gdb/gdb remote를 이용하여, 디버깅이 가능 합니다. kdb는 안해 봤지만, qemu로 돌려봤을땐 매우 잘 되는 것을 확인 했습니다. 전문적인 c/c++ IDE보다는 부족하지만, 그럭저럭 쓸만은 합니다. 제가 써본 gdb frontend 중에서 두번째로 좋습니다.


ctags/cscope의 결과물이 맘에 안들때, 대안으로 써볼수 있는 편집기이기도 하고, 이젠 나이먹어서 키보드 APM이 안나오는 개발자들에게도 좋은 대안이 될 수 있을 것이라 봅니다.



NeverEnd 님의 게시글 댓글
  • 주소복사
  • Facebook
  • X(Twitter)
댓글 • [17]
아범테크
IP 175.♡.14.115
12-30 2020-12-30 22:14:08 / 수정일: 2020-12-30 22:14:33
·
vscode 공식 cpp 익스텐션은 좀 쓰다가 이상하더라고요. 말씀대로 compile_commands.json을 전혀 안쓰고 폴더 안에 있는 소스를 통째로 파싱하다 보니 불필요한걸 너무 많이 뱉어내요...
소스 보는거는 vscode도 clangd 익스텐션 있어서 그걸 쓰고 있습니다. 애초에 clangd자체가 vscode덕에 나온 프로젝트인지라...
clangd 개별 설치와 compile_commands.json 를 잡아주면 별 성정없이 잘 되더라고요 ㅎ
NeverEnd
IP 110.♡.176.20
12-30 2020-12-30 22:22:09
·
@아범테크님 네, 맞습니다. 공식 익스텐션은 좀 멍텅구리 같은 면이 있어요. clangd도 inactive region이 없어서, 매크로로 날려버리는 부분이 되게 헷깔리더라구요. clangd 12 버전에서는 되긴 하는데, 아직 정식버전이 라니라서요. 성능도 좋고 다 좋은데, refactoring이 잘 안되서, 공식 익스텐션쓰고 있습니다.
진짜메뚜기
IP 61.♡.174.40
12-30 2020-12-30 22:21:41
·
커널 스터디 할 때도 vim만 써봤는데 좋네요... 기회가 되면 한번 세팅해봐야겠습니다
NeverEnd
IP 211.♡.142.198
12-30 2020-12-30 22:34:32
·
진짜메뚜기님// 써보니 확실히 쌔거가 좋네요.
홍치리
IP 58.♡.76.205
12-31 2020-12-31 06:01:12
·
제게는 vim + coc(+clangd) 가 최선이더군요. ifdef 지옥과 그나마 가장 근사한 심볼(레퍼런스)찾아주는 기능등이 꽤 괜찮아서 정착했습니다.
vscode 를 쓰면서 갓MS 를 외쳤지만, 역시 터미널이 맛이라고 생각하는 아재인지라.. vim 을 못버리네요..ㅠㅠ
NeverEnd
IP 110.♡.176.20
12-31 2020-12-31 12:00:41
·
홍치리님// 터미널 만의 맛이 있는데. 노안과 함께 손이 느려지는 건 어쩔 수가 없네요. 이젠 예전 처럼 키보드 질이.안됩니다 ㅜㅜ
삭제 되었습니다.
NeverEnd
IP 110.♡.176.20
12-31 2020-12-31 12:01:37
·
OS폐인님// 그냥 재미.있어서요. bpf는 아직 이해를 못 하겠어요
말과침묵
IP 118.♡.8.82
12-31 2020-12-31 09:10:39
·
저도 한번 셋팅해서 써봐야겠네요. 터미널에만 익숙해있어서 어떤 난관이 생길지 모르겠지만요. 전 커널소스 볼때는 emacs 와 눈필터링을 사용합니다.ㅎㅎ
NeverEnd
IP 110.♡.176.20
12-31 2020-12-31 12:03:36
·
말과침묵님// 저는 이제 눈 필터링하면 눈이 아려서 못 하겠어요.
양자이론
IP 163.♡.132.7
12-31 2020-12-31 10:12:47
·
3년 전에 리눅스 커널 개발 할때도 vscode쓰면서 정말 편하구나 싶었는데 지금은 더 좋아졌겠죠? 저는 지금도 vscode를 쓰긴 하는데 회사에서 자체 customize한 버젼이라 공식 vscode하고 쓰는 방식이 좀 다르고 아무 extension이나 설치하면 충돌 문제도 있어서 vscode를 쓰면서도 요즘 extension들이 어떻게 변해가는지를 모르고 있네요.
NeverEnd
IP 110.♡.176.20
12-31 2020-12-31 12:04:26
·
MARCEL님// 개발 속도가 좀 느려지긴 했는데, 그래도 꽤나 변했습니다
빔홀릭
IP 14.♡.144.170
12-31 2020-12-31 15:33:41
·
vscode에서 vim extension은 써보셨나요? 아직 가끔 코드 볼때 터미널에서 vim+plugin만 이용중입니다. c는 현업에서 멀어진지가 오래됬네요. 저도 C 코드 볼땐 vim+ctags/cscope만 이용했었습니다.
NeverEnd
IP 219.♡.218.170
12-31 2020-12-31 18:24:40
·
빔홀릭님// 요즘에 굳이 vim extension 은 찾아서 쓰지 않아서요.
하이드로이드
IP 175.♡.131.6
12-31 2020-12-31 16:13:57
·
c_cpp_properties.json 파일로 c/c++ 인텔리센스 동작을 설정할 수 있습니다.
NeverEnd
IP 219.♡.218.170
12-31 2020-12-31 18:23:39
·
Hydroid님// 어떤 동작을 의미하시는지 몰겠지만 제가 원하는 디테일한 설정은 안됩니다.
칼쓰뎅
IP 119.♡.210.205
12-31 2020-12-31 22:43:13
·
Vscode는 call hierachy 가 지원이안되서... 무거운 이클립스를 못떠나고있네요.
토로
IP 210.♡.64.130
02-23 2021-02-23 09:48:46
·
c_cpp_properties.json 파일로 c/c++ 인텔리센스 동작을 설정할 수 있습니다.

configurations의 defines 및 includePath 항목을 적절히 선택하시면 원하는 동작을 합니다.
make에서 사용하는 includePath 및 defines 항목을 c_cpp_properties.json 으로 변환하는
별도 프로그램을 만들어서 사용하고 있어요.
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB / 업로드 가능 확장자 jpg,gif,png,jpeg,webp
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
글쓰기
목록으로 댓글보기 이전글 다음글
아이디  ·  비밀번호 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET
보안 강화를 위한 이메일 인증
안전한 서비스 이용을 위해 이메일 인증을 완료해 주세요. 현재 회원님은 이메일 인증이 완료되지 않은 상태입니다.
최근 급증하는 해킹 및 도용 시도로부터 계정을 보호하기 위해 인증 절차가 강화되었습니다.

  • 이메일 미인증 시 글쓰기, 댓글 작성 등 게시판 활동이 제한됩니다.
  • 이후 새로운 기기에서 로그인할 때마다 반드시 이메일 인증을 거쳐야 합니다.
  • 2단계 인증 사용 회원도 최초 1회는 반드시 인증하여야 합니다.
  • 개인정보에서도 이메일 인증을 할 수 있습니다.
지금 이메일 인증하기
등록된 이메일 주소를 확인하고 인증번호를 입력하여
인증을 완료해 주세요.