gdb와 Vim을 어떻게 통합 할 수 있습니까?


52

화면 상단에 소스 코드를 표시하는 대신 gdbtui또는 ctrl+x아래 gdb에 탭 사이를 이동하는 버퍼를 Vim 편집기에서보고 싶습니다.

어떻게해야합니까?


참고로 lldb 플러그인 @ github.com/gilligan/vim-lldb를 찾았 으며 스크린 샷은 유망합니다.
이름을

BTW, windbg에 대해 아는 사람이 있습니까? Vim 통합은 좋은 생각이었습니다. 그러나 실제로는 거의 모든 소프트웨어에 대해 생각합니다.
eyal karni

답변:


33

내가 시도한 모든 플러그인 중에서 ConqueGDB 가 최선의 방법이라는 것을 알았 습니다. ConqueGDB는 Conque Shell 을 사용하여 GDB가 사용하는 대화식 쉘을 vim에 포함 시킵니다 .

ConqueGDB의 워크 플로는 GDB 터미널에서 GDB 명령을 입력하지 않고 vim 소스 코드에서 바로 가기를 사용합니다. 그러나 고급 명령을 원할 경우 GDB 프롬프트를 계속 사용하거나 전체 디버그 세션을 보려면 스크롤 할 수 있습니다.

일부 ConqueGDB 기본 매핑은 다음과 같습니다.

  • leaderr : 운영
  • leaderc : 계속하다
  • leaders : 단계
  • leaderp : 커서 아래의 인쇄 변수

vim 커서 라인이 GDB '인쇄 행'을 발행하는 데 어떻게 사용되었으며, 현재 코드 실행이 다른 라인 (14)에 있고 10 행에 중단 점이 있습니다.

CongueGDB를 가진 vim

예를 들어 Vundle과 함께 설치하려면 :

Plugin 'vim-scripts/Conque-GDB'

다음 플러그인 옵션을 사용합니다.

let g:ConqueTerm_Color = 2         " 1: strip color after 200 lines, 2: always with color
let g:ConqueTerm_CloseOnEnd = 1    " close conque when program ends running
let g:ConqueTerm_StartMessages = 0 " display warning messages if conqueTerm is configured incorrectly  

무슨 leader뜻입니까?
In78

@ In78 대부분의 컴퓨터에서 <kbd> \ </ kbd> 키를 의미합니다. 예를 들어 <leader>r내 컴퓨터에서 <kbd> \ </ kbd> + <kbd> r </ kbd>을 의미합니다. Vim manual에는 다음과 같은 항목이 있습니다.:help leader
Parsa

이 ConqueGDB 기본 매핑을 잊지 마십시오 : <Leader>b. 커서 위치에 중단 점을 설정합니다. 그러나 이것은 토글이 아니므로 다시 제거 할 수 없습니다. 오히려 GDB 프롬프트에 'clear'를 써야합니다.
serup

나는이 ConqueGdb를 사용해 보았고 그것을 작동시키기 위해 먼저 실행 파일을 지정했습니다. 때로는 브레이크 포인트 설정에 실패합니다-중단 점이 나타나기 전에 gdb 창에 초점을 맞추고 삽입을 위해 I을 눌러야합니다. ConqueGdb에 정상입니까?
serup

11

gdb를 통합하는 여러 플러그인이 있습니다.

  • 우리는 pyclewn을 사용했습니다 . 프로젝트는 중단 된 버전 2.3 이후. 마지막 커밋은 2016 년에 이루어졌습니다. 호기심 많은 사람들에게는 github 에 저자가 자신의 작품을 보관 한 거울 이 여전히 있습니다. 참고 : pyclewn은 다른 Xavier Degaye의 프로젝트 프로젝트의 마지막 단계로 사용되었습니다.
  • 다른 여러 디버거를 통합하는 vim- debugger
  • notEvil의 vim-debug"pyclewn이 몇 가지 단점을 극복하기위한 편의 계층" 역할을합니다.

그리고 LLDB를 통합하는 플러그인도 있습니다 (LLVM 프로젝트에서)

Bram은 현재 (2017 년 9 월) 새로운 :terminal기능 덕분에 vim 내에서 gdb 통합을 위해 노력하고있는 것 같습니다 . 이를 사용하려면 (로 ) termdebug패킷 을로드 :packadd termdebug한 다음을 사용하여 vim 창에서 gdb 콘솔을 시작할 수 있습니다 :TermDebug (+options). IMO는 Vim에서 GDB 통합의 미래라고 생각할 수 있습니다.


4
좋습니다-각 플러그인에 대한 간단한 개요를 제공 할 수 있습니까?
muru

1
?? 플러그인 공식 페이지로 연결되는 링크입니다. 예, 플러그인이 사라지거나 다른 곳으로 이동하면 변경 될 수 있습니다. 이 경우 이전에했던 것처럼 첫 번째 경우에 메시지를 업데이트합니다. 그리고 두 번째 경우에는 플러그인의 기능을 자세히 설명하는 메시지의 일부가 더 이상 사용되지 않음을 의미합니다. 최악의 시나리오 : 플러그인이 실제로 수행하는 작업을 자세히 설명하면 해당 작성자가 작업하고 기능을 추가하는 등 더 이상 사용되지 않습니다. 어쨌든. 나는 ... 다음 주 그들에 대한 간단한 설명을 추가 할 것입니다
루크 Hermitte에게

2
@LucHermitte 게시물이 검토 대기열에 나타났습니다. 나는이 메시지의 정확한 텍스트를 직접 추가하지 않았으며 시스템은 나를 위해 그것을했다. 어쨌든 링크 만 답변을 "나쁜"것으로 간주하고 대부분의 SE 사이트에서는 그렇지 않습니다. 그들이 구식이 될 수있을뿐만 아니라 실제로 설명 을하지 않기 때문에 ; 올바른 문서 페이지에 링크하면 거의 모든 질문에 "답변"할 수 있습니다. 대체로 소스 코드에 링크 할 수도 있지만 실제로 무언가를 설명하고 있습니까? 즉 정말 유용? 이것이 Vim에 대한 누군가의 이해에 실제로 기여 합니까 ?
Martin Tournoij

1
"이 메시지의 정확한 텍스트를 직접 추가하지 않았습니다. 시스템에서 저를 위해 그렇게했습니다 . " 승인. 그것은 내가 매우 이상하게 생각한 메시지를 설명합니다. 링크에 관해서. RTFM / SFTW에 대한 SO / SE 정책을 이해합니다. 다른 포럼과 달리 되풀이 / 중복 질문은 발견되면 닫히고 SO / SE는 위키 접근 방식에 더 가깝습니다.
Luc Hermitte 23.54에

3
플러그인을 찾을 위치와 관련하여. 나는 그들의 문서를 복제 할 수 있었다. 그러나별로 도움이되지 않습니다. 또한 플러그인이 발전함에 따라 답변을 최신 상태로 유지하는 것은 거의 불가능합니다. 최신 기능에 대한 간단한 요약을 추가하는 것이 가능합니다. 어쨌든 그들의 공식 페이지는 진입 점입니다. 플러그인과 관련하여 이것은 첫 번째 중요한 정보입니다. 실제로 멋진 프리젠 테이션은 우리에게 어필 할 수 있습니다 ... 우리가 특정 경우에 플러그인이 작동하지 않는다는 것을 알 때까지는 FSOSS에서 자주 발생합니다. 사용 가능한 솔루션 목록도 흥미로운 곳입니다.
Luc Hermitte 2019

7

GDB edit명령

다음 명령을 사용하여 현재 줄에서 편집기를 엽니 다.

$EDITOR +<current-line> <current-file>

기본값 editor은입니다 ex만 형식 vim도 이해 +<current-line>합니다.

편집기를 종료하면로 돌아갑니다 gdb.

이를 통해 소스를 자유롭게 탐색 할 수 있으며 ctags통합 된 경우 특히 강력합니다 .

이것은 빈약 한 사람의 내장 gdb-vim 통합 방법입니다. 가장 중요한 것은 Vim에서 중단 점을 설정하는 것입니다.

edit 그리고 중심

edit소스를 중심으로 Vim을 기본적으로 중심에 두지 않으므로이를 수행하는 Python 스크립트를 작성했습니다. https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- gdb / 43557406에서 현재 텍스트 라인 편집기

클립 보드 도우미에 대한 중단 점 명령

이 vim 명령은 다음 유형의 중단 점 지정자를 복사합니다.

b <file-path>:<line-number>

클립 보드로 :

command! Xg :let @+ = 'b ' . expand('%:p') . ':' . line('.')

그런 다음에 붙여 넣을 수 있습니다 gdb.

이것은 중단 점을 쉽게 설정하기 위해 gdb에 대한 빈약 한 사람의 vim 통합입니다.

참조 : https : //.com/questions/3536600/do-you-debug-c-code-in-vim-how


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.