Làm cách nào để tích hợp gdb với Vim?


52

Thay vì gdbtuihoặc ctrl+xdưới gdbđó hiển thị mã nguồn ở trên cùng của màn hình, tôi muốn thấy điều này trong trình soạn thảo Vim của tôi sẽ nhảy giữa các tab và bộ đệm tương ứng.

Tôi có thể làm cái này như thế nào?


Chỉ để tham khảo, tôi đã tìm thấy plugin lldb @ github.com/gilligan/vim-lldb và ảnh chụp màn hình trông đầy hứa hẹn.
tên

BTW, có ai biết gì về Windbg không? Tích hợp Vim có thể là một ý tưởng tốt. Mặc dù, thực sự tôi nghĩ điều này về hầu hết mọi phần mềm.
mắt karni

Câu trả lời:


33

Trong số tất cả các plugin tôi đã thử, tôi thấy ConqueGDB là cách tiếp cận tốt nhất. ConqueGDB sử dụng Conque Shell để nhúng một lớp vỏ tương tác bên trong vim, được sử dụng bởi GDB.

Quy trình làm việc với ConqueGDB bao gồm không nhập các lệnh GDB trên thiết bị đầu cuối GDB, bạn sử dụng các phím tắt trên mã nguồn vim. Nhưng bạn có thể tiếp tục sử dụng lời nhắc GDB nếu bạn muốn, cho các lệnh nâng cao hơn hoặc cuộn để xem toàn bộ phiên gỡ lỗi.

Một số ánh xạ mặc định của ConqueGDB, ví dụ:

  • leaderr : chạy
  • leaderc : tiếp tục
  • leaders : bươc
  • leaderp : biến in dưới con trỏ

Lưu ý cách dòng con trỏ vim đã được sử dụng để phát hành 'hàng in' GDB, việc thực thi mã hiện tại nằm ở một dòng khác (14) và có một điểm dừng trên dòng 10.

vim với CongueGDB

Để cài đặt với Vundle chẳng hạn:

Plugin 'vim-scripts/Conque-GDB'

Tôi sử dụng các tùy chọn plugin này:

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  

leadernghĩa là gì
In78

@ In78 Có nghĩa là phím <kbd> \ </ kbd> trên hầu hết các máy tính. Ví dụ: <leader>rcó nghĩa là <kbd> \ </ kbd> + <kbd> r </ kbd> trên máy tính của tôi. Hướng dẫn sử dụng Vim có một mục cho nó::help leader
Parsa

Đừng quên ánh xạ mặc định ConqueGDB này : <Leader>b. Nó đặt một điểm dừng ở vị trí con trỏ. Tuy nhiên, nó KHÔNG phải là một sự thay đổi, vì vậy bạn không thể sử dụng nó để loại bỏ nó một lần nữa. Thay vào đó, bạn sẽ phải viết 'xóa' trên dấu nhắc GDB.
serup

Tôi đã thử sử dụng ConqueGdb này và để làm cho nó hoạt động, trước tiên tôi đã chỉ định tệp thực thi - và đôi khi nó không thành công với việc thiết lập các điểm phanh - tôi phải tập trung cửa sổ gdb và nhấn I để chèn, trước khi điểm dừng xuất hiện - là đây bình thường cho ConqueGdb?
serup

11

Bạn có một số plugin tích hợp gdb.

  • Chúng tôi đã từng có pyclwn . Các dự án đã hết hiệu lực sau khi phiên bản 2.3. Cam kết cuối cùng đã được thực hiện vào năm 2016. Đối với những người tò mò vẫn còn một tấm gương trên github nơi tác giả của nó đã lưu trữ tác phẩm của mình. Lưu ý: pyclwn từng là bước cuối cùng trong quá trình phát triển của các dự án * clewn khác của Xavier Degaye.
  • vim-debugger , tích hợp một số trình gỡ lỗi khác
  • vE -debug của notEvil , hoạt động như "lớp tiện lợi cho pyclwn để khắc phục một số nhược điểm"

Và cũng có một plugin tích hợp lldb (từ dự án LLVM)

Có vẻ như Bram hiện (tháng 9 năm 2017) đang làm việc về việc tích hợp gdb từ bên trong vim nhờ :terminaltính năng mới . Để sử dụng nó, chúng ta cần tải termdebuggói (với :packadd termdebug), sau đó chúng ta sẽ có thể bắt đầu bảng điều khiển gdb trong cửa sổ vim với :TermDebug (+options). IMO, chúng ta có thể coi đó là tương lai của hội nhập GDB theo Vim.


4
Tốt - bạn có thể cung cấp một cái nhìn tổng quan ngắn về từng plugin này không?
muru 20/2/2015

1
?? Liên kết đến các trang chính thức của plugin. Có, họ có thể thay đổi nếu các plugin biến mất hoặc nếu chúng được di chuyển đi nơi khác. Trong trường hợp đó, tôi sẽ cập nhật tin nhắn trong trường hợp đầu tiên như tôi đã làm trước đây trên SO. Và trong trường hợp thứ hai, điều đó có nghĩa là một phần của bất kỳ thông báo nào nêu chi tiết những gì plugin sẽ bị phản đối. Trường hợp xấu hơn: chi tiết những gì plugin thực sự làm sẽ trở nên lỗi thời trong khi tác giả tương ứng của chúng làm việc với chúng, thêm các tính năng, v.v. Dù sao. Tôi sẽ thêm một mô tả ngắn gọn về họ vào tuần tới ...
Luc Hermitte

2
@LucHermitte Bài đăng xuất hiện trong hàng đánh giá; Tôi đã không thêm chính xác văn bản của tin nhắn này, hệ thống đã làm điều đó cho tôi. Trong mọi trường hợp, các câu trả lời chỉ liên kết được coi là "xấu" trên SO và hầu hết, nếu không phải tất cả, các trang SE. Không chỉ vì họ có thể hết hạn, mà còn bởi vì họ không thực sự giải thích mọi thứ; hầu như bất kỳ câu hỏi nào cũng có thể được "trả lời" bằng cách liên kết đến (các) trang tài liệu phù hợp, bạn thậm chí có thể liên kết đến mã nguồn, nhưng điều đó có thực sự giải thích điều gì không? Điều đó có thực sự hữu ích không? Điều đó thực sự đóng góp cho sự hiểu biết của ai đó về Vim?
Martin Tournoij

1
"Tôi đã không thêm chính xác văn bản của tin nhắn này, hệ thống đã làm điều đó cho tôi" . ĐỒNG Ý. Điều đó giải thích thông điệp, mà tôi thấy khá kỳ quặc. Về liên kết. Tôi hiểu chính sách SO / SE về RTFM / SFTW. Không giống như các diễn đàn khác, các câu hỏi định kỳ / trùng lặp được đóng lại khi được phát hiện và SO / SE có xu hướng hướng tới cách tiếp cận wiki nhiều hơn.
Luc Hermitte

3
Về nơi để tìm plugin. Tôi có thể sao chép tài liệu của họ. Nhưng nó sẽ không giúp được nhiều. Hơn nữa, hầu như không thể cập nhật câu trả lời khi các plugin phát triển. Có thể thêm một bản tóm tắt ngắn gọn không cập nhật về các tính năng và tôi sẽ thấy nó. Trong mọi trường hợp, trang chính thức của họ là điểm vào. Về plugin, đây là thông tin quan trọng đầu tiên. Thật vậy, một bài thuyết trình hay có thể hấp dẫn chúng tôi ... Cho đến khi chúng tôi phát hiện ra plugin không thể hoạt động trong trường hợp cụ thể của chúng tôi - điều thường xảy ra với FSOSS. Đây là nơi một danh sách các giải pháp có sẵn cũng thú vị.
Luc Hermitte

7

editLệnh GDB

Mở trình soạn thảo trên dòng hiện tại bằng lệnh:

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

Mặc định editorex, nhưng vimcũng hiểu +<current-line>định dạng.

Khi bạn thoát khỏi trình soạn thảo, bạn sẽ quay lại gdb.

Điều này cho phép bạn duyệt nguồn một cách tự do và đặc biệt mạnh mẽ nếu bạn có ctagstích hợp.

Đây là một cách tích hợp gdb một chiều của một người nghèo để tích hợp vim: điều còn thiếu chính là thiết lập các điểm dừng từ Vim.

edit và trung tâm

editkhông tập trung vào Vim theo mặc định xung quanh nguồn, vì vậy tôi đã tạo một tập lệnh Python thực hiện nó: https://stackoverflow.com/questions/43557405/how-to-open-the-cản-file-at-the- current-line-in-a-text-Editor-from-gdb / 43557406 # 43557406

Lệnh Breakpoint để trợ giúp clipboard

Lệnh vim này sao chép một công cụ xác định điểm dừng loại:

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

vào bảng tạm:

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

Sau đó, bạn có thể chỉ cần dán nó vào gdb.

Đây là sự tích hợp vim to gdb của một người nghèo để dễ dàng thiết lập các điểm dừng.

Xem thêm: https://stackoverflow.com/questions353366/do-you-debug-c-code-in-vim-how


3

Mặc dù không phải kỹ thuật vim. cgdb là một phiên bản nguyền rủa của gdb với các phím bấm giống như vim. Đó là trình gỡ lỗi goto của tôi trong nhiều năm:

https://cgdb.github.io/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.