gdb chia chế độ xem với mã


111

Tôi chỉ đang gỡ lỗi một chương trình trong gdb và bằng cách nào đó tôi tìm thấy một tính năng mới mà tôi chưa từng thấy hoặc thậm chí nghe nói trước đây, một chế độ xem phân tách nơi tôi có thể xem và duyệt mã ngoài việc đưa ra các lệnh:

Xin lỗi về hình ảnh, nhưng ttys không có ảnh chụp màn hình.

Cái này là cái gì? Tôi đã làm gì, hay cụ thể hơn là làm cách nào để có lại chế độ chia đôi màn hình này? Có tên cho chế độ này không, hoặc ở đâu đó tôi có thể đọc về cách sử dụng nó?


2
Để tham khảo nhanh: Bạn có thể thoát khỏi chế độ này bằng cách sử dụng bất kỳ Cx Ca, Cx a hoặc Cx A.` Xem câu hỏi này .
Richard

Câu trả lời:


95

Nó được gọi là TUI (không đùa đâu). Ví dụ bắt đầu bằng gdbtuihoặc gdb -tui...


11
bạn cũng có thể sử dụng layout nextsau khi bắt đầu gdbbình thường
khaverim

87

Bạn có thể kích hoạt nó động bằng cách nhấn ctrl+ xctrl+ a.


cảm ơn @ user146043, đây có vẻ là cách duy nhất nếu bạn đang chạy màn hình cùng lúc với ctrl-a là cách bắt đầu các lệnh màn hình!
olik79

Có vẻ như bạn cũng có thể kết thúc với combo đó!
Nick Desaulniers

40

Có hai biến thể của nó.

  1. để chỉ xem mã Bấm

Nhấn CTRL Xcùng nhau và sau đó 1

  1. Để xem cả nguồn và lắp ráp

Nhấn 'CTRL' 'X' cùng nhau và sau đó nhấn '2'

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

Ảnh chụp màn hình của chế độ xem với mã và lắp ráp. nhập mô tả hình ảnh ở đây

Cũng kiểm tra dự án Github tuyệt vời này.


Cảm ơn rất nhiều vì đã chia sẻ liên kết dự án github. Nó quá tuyệt vời :)
Vivek Agrawal

16

Bạn cũng có thể khởi động nó từ gdb shell bằng lệnh "-" (gạch ngang). Tuy nhiên, không chắc chắn về cách tự động tắt nó đi.


Đây có vẻ là cách dễ sử dụng và dễ nhớ nhất.
Siyuan Ren

2
Bạn có thể thoát bằng cách thực hiện bất kỳ Cx Ca, Cx a hoặc Cx A. Xem stackoverflow.com/questions/14147117/…
dmonopoly,

15

Bảng điều khiển GDB

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

Bảng điều khiển GDB sử dụng API GDB Python chính thức và in thông tin mà bạn muốn khi GDB dừng, ví dụ sau a next, như lệnh gốcdisplay .

Vs TUI:

  • mạnh mẽ hơn, vì nó chỉ in ra stdout thay vì đặt shell vào trạng thái lời nguyền ma thuật hơn, ví dụ:

  • có thể cấu hình cao từ Python: bạn có thể chọn những gì bạn muốn xuất ra và độ lớn của mỗi phần tùy thuộc vào những gì bạn đang gỡ lỗi.

    Các khung nhìn hữu ích nhất đã được triển khai: nguồn, lắp ráp, đăng ký, ngăn xếp, bộ nhớ, luồng, biểu thức ... nhưng sẽ dễ dàng mở rộng nó với bất kỳ thông tin nào được hiển thị trên GDB Python API.

    TUI chỉ cho phép hiển thị hai nguồn, lắp ráp và thanh ghi và đó là nó. Tất nhiên trừ khi bạn muốn sửa đổi mã nguồn C của nó ;-)

nhập mô tả hình ảnh ở đây

Tôi tin rằng GDB nên xuất xưởng với một thiết lập như vậy và được bật theo mặc định, nó sẽ thu hút nhiều người dùng hơn theo cách đó.

Ồ, và nhà phát triển chính, Andrea Cardaci , đã rất nhạy bén và tuyệt vời. Kudo lớn.

Xem thêm: Làm thế nào để đánh dấu và tô màu đầu ra gdb trong quá trình gỡ lỗi tương tác?


2
Không có đủ từ để mô tả điều đó tuyệt vời như thế nào. Cảm ơn :)
unresolved_external

11

Nhập layoutdưới dạng một lệnh trong gdb và cửa sổ tách sẽ được hiển thị.


5

Khi GDB ở chế độ tiêu chuẩn, việc sử dụng winsẽ tự động chuyển sang chế độ TUI.
Lệnh khác cho chế độ TUI:

  • info win
    Liệt kê và cung cấp kích thước của tất cả các cửa sổ được hiển thị.
  • focus next | prev | src | asm | regs | split
    Đặt tiêu điểm cho cửa sổ được đặt tên. Lệnh này cho phép thay đổi cửa sổ đang hoạt động để các phím cuộn có thể bị ảnh hưởng đến cửa sổ khác.

Đọc ở đây mẫu thêm trợ giúp.


2

Ngoài ra còn có công cụ giao diện cho GDB được gọi là cgdb. Ngay cả với một số màu nổi bật. "ESC" để chuyển sang chế độ xem mã, "i" để chuyển về gdb

cgdb


1

Chế độ của tui rõ ràng được lấy cảm hứng từ emacs - tôi phát hiện ra nó một cách tình cờ khi tôi nhấn ^ Xo, chuyển đổi giữa các cửa sổ chia nhỏ trong emacs - tôi đôi khi nhấn nó một cách lơ đễnh khi điều tôi nên làm là chuyển sang một chương trình khác. Dù sao, điều đó dẫn đến một tính năng khác chưa được đề cập, đó là bạn có thể di chuyển con trỏ từ cửa sổ mã (nơi bạn có thể cuộn) đến dòng lệnh, hoặc ngược lại, với ^ Xo.


Rõ ràng là hầu hết các chương trình từ GNU đều có các emac như keybinding, chủ yếu là vì lý do nhất quán. Tôi biết có một chế độ vi trong bash, nhưng điều đó gần như không đủ tốt như chế độ emacs.
klaus
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.