(Neo)vim 및 Vdebug를 사용하여 Lando에서 Drupal 디버깅

8044 단어 vimphpwebdev
Drupal 8에 OOP가 도입되면서 Drupal이 각 요청을 어떻게 처리하는지 추적하기가 조금 어려워졌습니다. 대부분의 경우 다른 개체를 처리하고 인스턴스화된 클래스와 호출된 메서드를 추적하고 변수를 검사합니다.

도구



그래서 내가 사용하는 도구는 무엇입니까? 저는 vim의 오랜 사용자였으며 최근에 Neovim으로 전환했습니다. 개발 환경의 경우 Drupal 빌드를 위해 주로 다른 방법 사이를 이동하지만 최근에는 Lando을 사용하고 있습니다.

랜도



구성의 경우 Lando가 환경에서 enable xdebug이 되도록 xdebugtrue로 설정하기만 하면 됩니다.

name: drupal
recipe: drupal8
services:
appserver:
webroot: web
xdebug: true
config:
php: config/php.ini

config/php.ini 의 경우 setting up vscode 의 내용을 따랐습니다.

[PHP]
; Xdebug
xdebug.max_nesting_level = 256
xdebug.show_exception_trace = 0
xdebug.collect_params = 0
; Extra custom Xdebug setting for debug to work in VSCode.
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = ${LANDO_HOST_IP}
; xdebug.remote_connect_back = 1
xdebug.remote_log = /tmp/xdebug.log


(네오)빔



(Neo)vim의 경우 Vdebug이 PHP에서 Xdebug를 사용하기 위한 유일한 옵션인 것 같습니다. 최소 구성은 다음과 같습니다.

call plug#begin(stdpath('data') . '/plugged')
Plug 'vim-vdebug/vdebug'
call plug#end()
if !exists('g:vdebug_options')
let g:vdebug_options = {}
endif
let g:vdebug_options.path_maps = {
\ '/app' : getcwd(),
\ }
let g:vdebug_options.break_on_open = 0
let g:vdebug_options.watch_window_style = 'compact'
if !exists('g:vdebug_features')
let g:vdebug_features = {}
endif
let g:vdebug_features.max_children = 128


vdebug_options.path_maps sets the paths so that it works with Lando.

vdebug_features.max_children allows inspecting variables from Drupal most of the time.



다른 옵션은 :h Vdebug에서 찾을 수 있습니다.

디버깅



노드를 보고 있고 메서드를 디버그하려는 시나리오를 고려하십시오\Drupal\node\Entity\Node::getType(). 디버깅을 시작하려면 파일core/modules/node/src/Entity/Node.php을 열고 F10을 사용하여 중단점을 설정하고 F5를 사용하여 디버거를 시작하고 마지막으로 단일 노드를 방문합니다.

내 말로는 다음과 같이 설명할 수 있지만 단계 디버깅에 대한 실제 정의를 완전히 확신할 수는 없습니다.
  • 건너뛰기: 소스의 다음 줄로 계속 진행합니다.
  • 한 단계씩 실행: 라인이 특정 함수/메소드를 호출하는 경우 해당 함수/메소드로 이동한 다음 디버깅을 계속할 수 있습니다.
  • 나가기: 나머지 줄을 건너뛰고 다음 단계로 진행합니다.

  • 바인딩



    위의 구성에서 대부분 기본 바인딩( :h VdebugKeys )에 의존합니다.

    let g:vdebug_keymap = {
    \ "run" : "<F5>",
    \ "run_to_cursor" : "<F9>",
    \ "step_over" : "<F2>",
    \ "step_into" : "<F3>",
    \ "step_out" : "<F4>",
    \ "close" : "<F6>",
    \ "detach" : "<F7>",
    \ "set_breakpoint" : "<F10>",
    \ "get_context" : "<F11>",
    \ "eval_under_cursor" : "<F12>",
    \ "eval_visual" : "<Leader>e",
    \}
    
    


    사용자 인터페이스




    Vdebug UI

    각 창에 대한 설명은 :h VdebugUI에서 확인할 수 있습니다. 컨텍스트와 함께 다양한 변수를 검사할 수 있기 때문에 "Watch"창이 매우 유용하다는 것을 알았습니다. 변수에서 Enter 키를 누르면 트리가 확장/축소됩니다.

    지금까지는 Vdebug를 사용하여 (Neo)vim으로 디버깅하기 위한 기본 사항이라고 생각합니다. Vdebug에는 평가와 같은 다른 많은 기능이 있지만 아직 다른 기능을 더 많이 사용하지는 않았습니다.

    좋은 웹페이지 즐겨찾기