VIM을 IDE로 사용하기 (4) - vimspector로 디버거 장착하기

IDE에 디버거가 없으면 섭섭하다
vimspector로 VIM에 날개를 달아보자
나는 LLDB를 주로 사용하니 LLDB 기준으로 설명한다

.vimrc 파일을 열어 아래 내용을 추가한다

#아래 내용을 plug#begin ~ plug#end 사이에 추가한다

Plug 'puremourning/vimspector'

#vimspector관련 mapping을 추가한다 아래 스크립트는 plug블럭 밖에 붙여넣는다
let g:vimspector_enable_mappings = 'HUMAN'
nmap <leader>dd :call vimspector#Launch()<CR>
nmap <leader>dx :VimspectorReset<CR>
nmap <Leader>di <Plug>VimspectorBalloonEval
nmap <leader>de :VimspectorEval
nmap <leader>dw :VimspectorWatch
nmap <leader>do :VimspectorShowOutput
nmap <leader>dc :!cc -g -I./libft/libft.h -L./libft/ -lft % -o main<CR>

#.vimrc파일 저장 및 반영
:w
:source %
:PlugInstall

#python3로 컴파일한 vim이 필요하다 간단하게 아래와같이 해결
#vim을 종료하고 터미널에 아래와같이 입력
pip3 install neovim

#vim을 다시 실행해서 아래와같이 입력
:VimspectorInstall CodeLLDB

#프로젝트 root에(내 소스코드가 있는 폴더) .vimspector.json파일 생성
:sp (project root 경로)/.vimspector.json

#파일이 열리면 아래와같이 입력 후 저장
{
  "configurations": {
  "C - Launch": {
    "adapter": "CodeLLDB",
    "configuration": {
      "name": "Cpp: Launch current file",
      "type": "lldb",
      "request": "launch",
      "externalConsole": false,
      "logging": {
        "engineLogging": true
      },
      "stopOnEntry": true,
      "stopAtEntry": true,
      "debugOptions": [],
      "MIMode": "lldb",
      "cwd": "${cwd}",
      "program": "${fileDirname}/${fileBasenameNoExtension}"
    }
  }
  }
}

위 내용을 따라했다면 디버깅을 사용할 준비는 되었다 먼저 실행파일을 준비하자

#디버깅옵션으로 실행파일 만들기
#위에 .vimspector.json에서 정의해준 형식대로 만들려면 main.c파일의 실행파일은
#main이 되어야한다 만약 program 부분을 수정해서 사용한다면 그에 맞게 사용 가능
cc -g main.c -o main

#vim 실행 후 원하는곳에 breaking point 지정 --> 단축키: F9
#vimspector 실행 --> 단축키: F5
#아래 명령줄에 무언가를 묻는데 엔터 두번 탁탁

실행되면 아래와 같은 화면이 표시된다

위와같은 화면이 표시되면 다시 F5
아래와같이 어샘블리코드가 c코드로 표시된다

이외 단축키는 vimspector repository에 설명되어있다
https://github.com/puremourning/vimspector

이제 여러분은 vim으로 이런것도할 수 있다
(eval을 원하는 변수에 커서를 놓고<leader><di>)
--> <leader>키는 역슬레쉬(\ )

watch 또한 가능하다
<leader><dw> 입력 후 명령창에 :VimspectorWatch가 입력되면
공백 하나 입력 후 원하는 변수명을 입력하면 아래와같이 watch에 등록된다

지우려면 watch창에서 해당 변수 위에 커서를 놓고 delete키

이후 디버깅이 끝나면 <leader><dx>로 빠져나가면 된다

gilee

gilee