ฉันจะรวม gdb กับ Vim ได้อย่างไร?


52

แทนที่จะเป็นgdbtuiหรือctrl+xใต้gdbซึ่งจะแสดงซอร์สโค้ดที่ด้านบนของหน้าจอฉันต้องการเห็นสิ่งนี้ในโปรแกรมแก้ไข Vim ที่จะข้ามไปมาระหว่างแท็บและบัฟเฟอร์ตามลำดับ

ฉันจะทำสิ่งนี้ได้อย่างไร


สำหรับการอ้างอิงฉันพบ lldb plugin @ github.com/gilligan/vim-lldbและภาพหน้าจอดูมีแนวโน้ม
ชื่อ

BTW ใครรู้อะไรเกี่ยวกับ windbg บ้าง การรวมกันเป็นกลุ่มอาจเป็นความคิดที่ดี แม้ว่าที่จริงแล้วฉันคิดว่านี่เกี่ยวกับซอฟต์แวร์เกือบทั้งหมดที่มี
eyal karni

คำตอบ:


33

ในบรรดาปลั๊กอินทั้งหมดที่ฉันได้ลองฉันพบว่าConqueGDBเป็นวิธีที่ดีที่สุด ConqueGDB ใช้Conque Shellเพื่อฝังเชลล์แบบโต้ตอบภายในกลุ่มที่ใช้โดย GDB

เวิร์กโฟลว์กับ ConqueGDB ประกอบด้วยการไม่ป้อนคำสั่ง GDB บนเทอร์มินัล GDB คุณใช้ทางลัดบนซอร์สโค้ด vim แต่คุณสามารถใช้พรอมต์ GDB ต่อไปหากต้องการคำสั่งขั้นสูงหรือเลื่อนเพื่อดูเซสชันการแก้ไขข้อบกพร่องทั้งหมด

ตัวอย่างการแม็พดีฟอลต์ของ ConqueGDB ตัวอย่างเช่น:

  • leaderr : วิ่ง
  • leaderc : ดำเนินการต่อ
  • leaders : ขั้นตอน
  • leaderp : ตัวแปรการพิมพ์ใต้เคอร์เซอร์

โปรดสังเกตว่าการใช้เคอร์เซอร์ vim ในการพิมพ์ 'แถวพิมพ์' ของ GDB การดำเนินการปัจจุบันของรหัสอยู่ในอีกบรรทัดหนึ่ง (14) และมีจุดพักบนบรรทัดที่ 10

เป็นกลุ่มที่มี CongueGDB

ในการติดตั้งด้วย 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 มีรายการ::help leader
Parsa

ไม่ลืมการทำแผนที่ ConqueGDB <Leader>bเริ่มต้นนี้: มันตั้งเบรกพอยต์ที่ตำแหน่งเคอร์เซอร์ อย่างไรก็ตามมันไม่ใช่การสลับดังนั้นคุณจะไม่สามารถใช้มันเพื่อลบมันได้อีกครั้ง แต่คุณจะต้องเขียน 'ชัดเจน' ในพรอมต์ GDB
serup

ฉันได้ลองใช้ ConqueGdb นี้และเพื่อให้ทำงานฉันได้ระบุไฟล์ปฏิบัติการ - และบางครั้งมันล้มเหลวด้วยการตั้งค่า brakepoints - ฉันต้องโฟกัสหน้าต่าง gdb และกด I เพื่อแทรกก่อนที่จะถึงจุดพักจะปรากฏ - นี่คือ ปกติสำหรับ ConqueGdb?
serup

11

คุณมีปลั๊กอินหลายตัวที่รวม gdb ไว้

  • เราเคยได้pyclewn โครงการได้ถูกยกเลิกหลังจากรุ่น 2.3 ความมุ่งมั่นครั้งล่าสุดได้ถูกสร้างขึ้นในปี 2016 สำหรับคนที่อยากรู้อยากเห็นยังคงมีกระจกบน GitHubที่ผู้เขียนได้เก็บงานของเขา หมายเหตุ: pyclewn เคยเป็นขั้นตอนสุดท้ายในวิวัฒนาการของโครงการ * clewn ของ Xavier Degaye
  • vim-debuggerที่รวม debuggers อื่น ๆ เข้าด้วยกัน
  • notimv ของvim-debugซึ่งทำหน้าที่เป็น"ชั้นความสะดวกสบายสำหรับ pyclewn เพื่อเอาชนะข้อเสียบางอย่าง"

และยังมีปลั๊กอินที่รวม lldb (จากโครงการ LLVM)

ดูเหมือนว่า Bram ปัจจุบัน (กันยายน 2017) กำลังทำงานเกี่ยวกับการรวมของ gdb จากภายในกลุ่มขอบคุณด้วย:terminalคุณสมบัติใหม่ ที่จะใช้มันเราต้องโหลดtermdebugแพ็คเก็ต (มี:packadd termdebug) แล้วเราจะสามารถที่จะเริ่มต้นคอนโซล gdb :TermDebug (+options)ในหน้าต่างที่เป็นกลุ่มที่มี IMO เราสามารถพิจารณาให้เป็นอนาคตของการรวม GDB ภายใต้ Vim


4
ดี - คุณสามารถให้ภาพรวมสั้น ๆ ของแต่ละปลั๊กอินเหล่านี้ได้หรือไม่
muru

1
?? ลิงค์ไปยังหน้าอย่างเป็นทางการของปลั๊กอิน ใช่พวกเขาสามารถเปลี่ยนแปลงได้หากปลั๊กอินหายไปหรือย้ายไปอยู่ที่อื่น ในกรณีนั้นฉันจะอัปเดตข้อความในกรณีแรกเช่นเดียวกับฉันก่อนหน้านี้ใน SO และในกรณีที่สองมันหมายถึงส่วนหนึ่งของข้อความใด ๆ ที่ให้รายละเอียดว่าปลั๊กอินทำอะไรไม่ได้ สถานการณ์ที่เลวร้ายยิ่งขึ้น: รายละเอียดสิ่งที่ปลั๊กอินทำจริงจะล้าสมัยในขณะที่ผู้เขียนนั้นทำงานกับพวกเขาเพิ่มคุณสมบัติและอื่น ๆ อย่างไรก็ตาม. ฉันจะเพิ่มคำอธิบายสั้น ๆ ของพวกเขาในสัปดาห์หน้า ...
Luc Hermitte

2
@LucHermitte โพสต์มาในคิวรีวิว ฉันไม่ได้เพิ่มข้อความที่แน่นอนของข้อความนี้ด้วยตนเองระบบก็ทำเพื่อฉัน ไม่ว่าในกรณีใดลิงก์เฉพาะคำตอบจะถือว่า "ไม่ดี" ใน SO และส่วนใหญ่หากไม่ใช่เว็บไซต์ SE ไม่ใช่เพียงเพราะพวกเขาอาจล้าสมัย แต่ยังเพราะพวกเขาไม่ได้อธิบายสิ่งต่างๆ เกือบคำถามใด ๆ อาจจะ "ตอบ" โดยการเชื่อมโยงไปยังหน้าเอกสารที่เหมาะสม (s), นรกคุณยังสามารถเชื่อมโยงไปยังรหัสที่มา แต่ไม่ว่าจริงๆอธิบายอะไร? มันมีประโยชน์จริงเหรอ? ไม่ว่ามันนำไปสู่ความเข้าใจของใครบางคนของกลุ่ม?
Martin Tournoij

1
"ฉันไม่ได้เพิ่มข้อความที่แน่นอนของข้อความนี้เองระบบไม่ว่าสำหรับฉัน" ตกลง. นั่นอธิบายถึงข้อความที่ฉันพบว่าค่อนข้างแปลก เกี่ยวกับลิงค์ ฉันเข้าใจนโยบาย SO / SE เกี่ยวกับ RTFM / SFTW ต่างจากฟอรัมอื่น ๆ คำถามที่เกิดซ้ำ / ซ้ำจะถูกปิดเมื่อตรวจพบและ SO / SE มีแนวโน้มที่จะเข้าหาวิกิมากขึ้น
Luc Hermitte

3
เกี่ยวกับตำแหน่งที่จะค้นหาปลั๊กอิน ฉันสามารถทำซ้ำเอกสารของพวกเขา แต่มันก็ไม่ได้ช่วยอะไรมาก ยิ่งไปกว่านั้นมันแทบจะเป็นไปไม่ได้ที่จะรักษาคำตอบล่าสุดในขณะที่ปลั๊กอินพัฒนา การเพิ่มคุณสมบัติสรุปสั้น ๆ ที่ไม่เป็นปัจจุบันเป็นไปได้และฉันจะเห็น ไม่ว่าในกรณีใดหน้าอย่างเป็นทางการของพวกเขาคือจุดเริ่มต้น เกี่ยวกับปลั๊กอินนี่เป็นข้อมูลที่สำคัญครั้งแรก จริง ๆ แล้วการนำเสนอที่ดีสามารถดึงดูดเราได้ ... จนกว่าเราจะพบว่าปลั๊กอินไม่สามารถทำงานได้ในกรณีเฉพาะของเรา - ซึ่งเกิดขึ้นบ่อยครั้งกับ FSOSS นี่คือสิ่งที่รายการโซลูชั่นที่มีอยู่ก็น่าสนใจเช่นกัน
Luc Hermitte

7

editคำสั่งGDB

เปิดตัวแก้ไขบนบรรทัดปัจจุบันโดยใช้คำสั่ง:

$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-current ปัจจุบันสายใน-a-แก้ไขข้อความจากที่ gdb / 43557406 # 43557406

คำสั่งเบรกพอยต์เพื่อช่วยคลิปบอร์ด

คำสั่ง vim นี้คัดลอกตัวระบุจุดพักประเภท:

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

ไปที่คลิปบอร์ด:

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

จากนั้นคุณสามารถวางลงในนั้น gdbนั้น

นี่เป็นเสียงเรียกเข้าของคนจนกับการรวม gdb เพื่อความสะดวกในการตั้งค่าเบรกพอยต์

ดูเพิ่มเติมที่: https://stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how


3

แม้ว่าจะไม่เป็นกลุ่มในทางเทคนิค cgdb เป็นคำสาปของ gdb ที่มี keybindings คล้ายเสียงเรียกเข้า มันเป็นดีบักเกอร์ goto ของฉันมานานหลายปี:

https://cgdb.github.io/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.