gdb แยกมุมมองด้วยรหัส


111

ฉันเพิ่งดีบักโปรแกรมใน gdb และฉันก็พบคุณสมบัติใหม่ที่ฉันไม่เคยเห็นหรือเคยได้ยินมาก่อนมุมมองแยกที่ฉันสามารถดูและเรียกดูโค้ดได้นอกเหนือจากการให้คำสั่ง:

ขออภัยเกี่ยวกับรูปภาพ แต่ ttys ไม่มีภาพหน้าจอ

นี่คืออะไร? ฉันทำอะไรหรือโดยเฉพาะอย่างยิ่งฉันจะได้รับโหมดแยกหน้าจอนี้อีกครั้งได้อย่างไร มีชื่อสำหรับโหมดนี้หรือไม่หรือสามารถอ่านวิธีใช้งานได้จากที่ไหน


2
เพื่อการอ้างอิงอย่างรวดเร็ว: คุณสามารถออกจากโหมดนี้ได้โดยใช้ Cx Ca, Cx a หรือ Cx A `ดูคำถามนี้
Richard

คำตอบ:


95

เรียกว่า TUI (ไม่ล้อเล่น) เริ่มต้นด้วยgdbtuiหรือgdb -tui...


11
คุณยังสามารถใช้ได้layout nextหลังจากเริ่มต้นgdbตามปกติ
khaverim

87

คุณสามารถเรียกมันแบบไดนามิกโดยการผลักดันctrl+ xและ+ctrla


ขอบคุณ @ user146043 นี่เป็นวิธีเดียวหากคุณกำลังเรียกใช้หน้าจอในเวลาเดียวกันเนื่องจาก ctrl-a เป็นวิธีเริ่มต้นคำสั่งหน้าจอ!
olik79

ดูเหมือนว่าคุณสามารถปิดด้วยคำสั่งผสมนั้นได้เช่นกัน!
Nick Desaulniers

40

มีสองสายพันธุ์

  1. เพื่อดูรหัสเท่านั้นกด

กดCTRL Xพร้อมกันแล้ว 1

  1. เพื่อดูทั้งแหล่งที่มาและการประกอบ

กด 'CTRL' 'X' พร้อมกันแล้วกด '2'

http://www.cs.fsu.edu/~baker/ada/gnat/html/gdb_23.html

ภาพหน้าจอของมุมมองพร้อมรหัสและชุดประกอบ ใส่คำอธิบายภาพที่นี่

ตรวจสอบโครงการ Github ที่น่าทึ่งนี้ด้วย


ขอบคุณมากสำหรับการแบ่งปันลิงก์โครงการ github มันน่ากลัวเกินไป :)
Vivek Agrawal

16

คุณยังสามารถเริ่มจาก gdb เชลล์โดยใช้คำสั่ง "-" (เส้นประ) ไม่แน่ใจว่าจะปิดแบบไดนามิกอย่างไร


ดูเหมือนว่าจะใช้และจำได้ง่ายที่สุด
Siyuan Ren

2
คุณสามารถออกโดยทำ Cx Ca, Cx a หรือ Cx A อย่างใดอย่างหนึ่งดูstackoverflow.com/questions/14147117/…
dmonopoly

15

แดชบอร์ด GDB

https://github.com/cyrus-and/gdb-dashboard

GDB แดชบอร์ดที่ใช้อย่างเป็นทางการ GDB หลาม APIและพิมพ์ข้อมูลที่คุณต้องการเมื่อ GDB หยุดเช่นหลังจากnextเช่นพื้นเมืองdisplayคำสั่ง

เทียบกับ TUI:

  • แข็งแกร่งมากขึ้นเนื่องจากเพียงแค่พิมพ์ไปที่ stdout แทนที่จะใส่เชลล์ในสถานะคำสาปเวทย์มนตร์เช่น:

  • กำหนดค่าได้สูงจาก Python: คุณสามารถเลือกสิ่งที่คุณต้องการส่งออกและแต่ละส่วนมีขนาดใหญ่เพียงใดขึ้นอยู่กับสิ่งที่คุณกำลังแก้จุดบกพร่อง

    มุมมองที่เป็นประโยชน์ที่สุดได้ถูกนำไปใช้แล้ว: ซอร์สแอสเซมบลีรีจิสเตอร์สแต็กหน่วยความจำเธรดนิพจน์ ... แต่ควรจะขยายได้ง่ายด้วยข้อมูลใด ๆ ที่เปิดเผยบน GDB Python API

    TUI อนุญาตให้แสดงแหล่งที่มาแอสเซมบลีและรีจิสเตอร์เพียงสองรายการเท่านั้น เว้นแต่คุณต้องการแก้ไขเป็นซอร์สโค้ด C แน่นอน ;-)

ใส่คำอธิบายภาพที่นี่

ฉันเชื่อว่า GDB ควรมาพร้อมกับการตั้งค่าแบบนั้นนอกกรอบและเปิดใช้งานตามค่าเริ่มต้นซึ่งจะดึงดูดผู้ใช้มากขึ้นด้วยวิธีนี้

โอ้และผู้พัฒนาหลักAndrea Cardaciได้รับการตอบสนองและยอดเยี่ยมมาก ความรุ่งโรจน์ใหญ่

ดูเพิ่มเติม: วิธีการเน้นและสีเอาต์พุต gdb ระหว่างการดีบักแบบโต้ตอบ


2
ไม่มีคำเพียงพอที่จะอธิบายว่ามันยอดเยี่ยมแค่ไหน ขอบคุณ :)
unresolved_external


5

เมื่อ GDB อยู่ในโหมดมาตรฐานการใช้winจะสลับในโหมด TUI โดยอัตโนมัติ
คำสั่งอื่น ๆ สำหรับโหมด TUI:

  • info win
    แสดงรายการและกำหนดขนาดของหน้าต่างที่แสดงทั้งหมด
  • focus next | prev | src | asm | regs | split
    ตั้งโฟกัสไปที่หน้าต่างที่มีชื่อ คำสั่งนี้อนุญาตให้เปลี่ยนหน้าต่างที่ใช้งานอยู่เพื่อให้คีย์การเลื่อนได้รับผลกระทบไปยังหน้าต่างอื่น

อ่านความช่วยเหลือเพิ่มเติมที่นี่


2

นอกจากนี้ยังมีเครื่องมืออินเตอร์เฟสสำหรับ GDB ที่เรียกว่า cgdb แม้จะมีการเน้นสีบางสี "ESC" เพื่อเปลี่ยนเป็นมุมมองโค้ด "i" เพื่อเปลี่ยนกลับเป็น gdb

cgdb


1

โหมด tui ได้รับแรงบันดาลใจอย่างชัดเจนจาก emacs - ฉันค้นพบโดยบังเอิญเมื่อฉันกด ^ Xo ซึ่งสลับไปมาระหว่างหน้าต่างแยกใน emacs - บางครั้งฉันก็คิดว่าไม่สนใจเมื่อสิ่งที่ฉันควรทำคือเปลี่ยนไปใช้โปรแกรมอื่น อย่างไรก็ตามนั่นนำไปสู่คุณสมบัติอื่นที่ยังไม่ได้กล่าวถึงคุณสามารถย้ายเคอร์เซอร์จากหน้าต่างรหัส (ซึ่งคุณสามารถเลื่อน) ไปที่บรรทัดคำสั่งหรือในทางกลับกันด้วย ^ Xo


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