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


172

Vui lòng không trả lời Tôi nên sử dụng ddd, nemiver, emacs, vim hoặc bất kỳ giao diện người dùng nào khác, tôi chỉ thích gdb như vậy, nhưng muốn xem đầu ra của nó với một số màu thiết bị đầu cuối.


4
Nó sẽ không cung cấp cho bạn màu sắc (vì vậy tôi sẽ không gọi đây là Câu trả lời), nhưng một số cấu hình ~ / .gdbinit sẽ cải thiện trải nghiệm. Tôi sử dụng điều này ở mức tối thiểu: thiết lập lưu lịch sử trên bộ in khá ấn định set-radix 16 set height 0
activout.se

Sẽ tốt hơn nếu thay đổi câu trả lời được chấp nhận để câu trả lời cũ, không chính xác của tôi có thể bị xóa. Cảm ơn.
ddaa

Khi đã tô sáng dòng hiện tại trên lđược triển khai sourceware.org/ormszilla/show_orms.cgi?id=21044 , tôi sẽ chỉ cần thêm lvào a hook-stopvà nhập Dev Nirvana.
Ciro Santilli 郝海东 冠状 病 事件

Câu trả lời:


183

.gdbinit

Bạn có thể tinh chỉnh ~/.gdbinitđể có màu sắc. Bạn có thể sử dụng mammon .gdbinitcó sẵn ở đây:

https://github.com/gdbinit/gdbinit

Bạn có thể chỉnh nó nhiều như bạn muốn. Tôi tìm thấy điều này nhờ câu trả lời SO này . Đây là loại đầu ra mà bạn có thể có được:

.gdbinit

Kho lưu trữ GitHub cũng có sẵn: https://github.com/gdbinit/Gdbinit

Bên cạnh đó, ý tưởng tương tự cũng được áp dụng cho lldb .

Bảng điều khiển GDB

Theo cùng một khái niệm, Bảng điều khiển GDB cung cấp giao diện trực quan mô-đun cho GDB bằng Python.

Bảng điều khiển GDB

(khoảng trống khung tập đi

Một dự án tương tự khác sử dụng hỗ trợ Python của GDB để cung cấp khả năng mở rộng nhiều hơn, vì vậy đây là giá trị kiểm tra: https://github.com/dholm/voidwalker

@dholm cũng cung cấp .gdbinit của riêng mình lấy cảm hứng từ cái trước.

(khoảng trống khung tập đi

pwndbg

Một số dự án cung cấp một tập hợp các chức năng hữu ích, bao gồm hiển thị được cải thiện. Đây là trường hợp của PEDA hoặc pwndbg . Cái sau đưa ra mô tả sau:

Một sự thay thế PEDA. Trong tinh thần của người bạn tốt của chúng tôi windbg, pwndbgđược phát âm pwnd-bag.

  • Tốc độ
  • Khả năng phục hồi
  • Mã sạch

Nó cung cấp các lệnh để hỗ trợ gỡ lỗi và khai thác phát triển tương tự như các lệnh từ PEDA và hiển thị tốt hơn (mặc dù đây không phải là trọng tâm chính của dự án). Phần mềm vẫn đang được phát triển và chưa được phát hành đúng cách.

pwndbg

vôn kế

Các dự án quốc gia mô tả:

Voltron là một giao diện người dùng gỡ lỗi mở rộng cho tin tặc. Nó cho phép bạn đính kèm các khung nhìn tiện ích đang chạy trong các thiết bị đầu cuối khác vào trình gỡ lỗi của bạn (LLDB hoặc GDB), hiển thị thông tin hữu ích như tháo gỡ, ngăn xếp nội dung, đăng ký giá trị, v.v., trong khi vẫn cung cấp cho bạn trình gỡ lỗi CLI mà bạn đã sử dụng.

Bạn có thể sửa đổi .gdbinitđể tự động tích hợp nó. Tuy nhiên, màn hình hiển thị nằm ngoài GDB (ví dụ: trong phần tách tmux).

vôn kế

GEF

GEF là một lựa chọn khác, và nó được mô tả là:

Mục đích được sử dụng chủ yếu bởi các nhà khai thác và kỹ sư đảo ngược, để cung cấp các tính năng bổ sung cho GDB bằng API Python để hỗ trợ trong quá trình phân tích động và phát triển khai thác.

GEF


Rất cám ơn câu trả lời của bạn, bạn có ý tưởng làm thế nào để tắt đầu ra đăng ký không? (Tôi đang sử dụng gdb cho mã C ++ và không cần cấp độ trình biên dịch ngay lập tức)
vak

Đúng. Chết tiệt "Nhận xét phải có ít nhất 15 ký tự."
vak

1
@vak bạn đã thử set $SHOWCPUREGISTERS = 0chưa? Về cơ bản, bạn đã có một số tham số mà bạn có thể đặt và bạn luôn có thể sửa đổi mã cho phù hợp với nhu cầu của mình.
BenC

100

Đó không phải là màu sắc, nhưng hãy xem xét gui văn bản của gdb . Nó làm cho một sự khác biệt lớn với cách gdb có thể sử dụng được.

Bạn có thể khởi chạy nó với:

gdb -tui executable.out

Ảnh chụp màn hình:

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

Như bạn có thể thấy, các tính năng chính là:

  • hiển thị dòng nào của nguồn chúng ta đang ở và các dòng xung quanh
  • hiển thị điểm dừng

5
Ồ Cảm ơn! Tôi đã tìm kiếm một vỏ đồ họa đẹp quanh gdb trong một thời gian dài và tôi đã thử xxgdb, kgdb và ddd, nhưng không ai trong số chúng hoạt động rất tốt cho tôi, vì vậy tôi đã bị mắc kẹt với giao diện dòng lệnh cũ đơn giản. Nhưng điều này là hoàn toàn hoàn hảo!
Thomas Padron-McCarthy

46
Ctrl-x Ctrl-a: Nhập cái này để chuyển sang và từ chế độ gui văn bản, hoạt động ngay cả khi không có tùy chọn dòng lệnh.
jturcotte

2
In ra stdout từ chương trình phá vỡ giao diện cho tôi. Bất kỳ cách giải quyết nào ngoài việc chuyển hướng nó?
Ciro Santilli 郝海东 冠状 病 事件

1
Tôi gặp vấn đề tương tự với thiết bị xuất chuẩn phá vỡ giao diện. Ctrl-L hoặc bất cứ điều gì liên kết vẽ lại của bạn làm cho nó có thể sử dụng ít nhất. Đối với những người có chế độ chỉnh sửa vi được bật, Ctrl-X Ctrl-A không hoạt động, nhưng lệnh 'layout src' sẽ đưa bạn vào chế độ TUI với nguồn được hiển thị như hình ảnh.
wilywampa

1
Mở một thiết bị đầu cuối thứ hai và sau đó ban hành lệnh: $ tty Sử dụng kết quả để xuất chuẩn trực tiếp từ phiên gdb đến thiết bị đầu cuối đó bằng cách sử dụng lệnh (gdb) đặt lệnh kém hơn. Ví dụ. từ tập hợp .gdbinit của tôi inferior-tty / dev / tty2 bây giờ, thiết bị xuất chuẩn của bạn sẽ không gây rối $ gdb -tui.
netskink

46

Tôi biết bạn không muốn một lối vào. Nhưng làm thế nào về cgdb nó rất gần với gdb, nó là textmode nhưng có một cửa sổ nguồn ở trên với cú pháp tô sáng trên mã.


2
sudo apt-get cài đặt cgdb
cs01

2
Một sự tình cờ thực sự :)
Không biết gì

Chỉ cần thử chạy nó: nó không thấy bất kỳ lịch sử gdb nào và nó cũng có một dấu nhắc bị vặn, trong đó có một khoảng trắng giữa dấu mũ và vị trí thực tế nơi biểu tượng được gõ (điều này có thể là do tôi có dấu nhắc màu gdb ) . Không ấn tượng chút nào.
Hi-Angel

19

Có thể tăng cường đáng kể sự xuất hiện của gdb thông qua việc sử dụng màu sắc. Điều này được thực hiện thông qua bất kỳ phương pháp nào sau đây:

  1. Dấu nhắc được tô màu thông qua "dấu nhắc thiết lập". Ví dụ, làm cho dấu nhắc đậm và đỏ:

    set prompt \033[1;31m(gdb) \033[m

    hoặc làm cho dấu nhắc thành một hình dạng mới, đậm và đỏ:

    set prompt \033[01;31m\n\n#####################################> \033[0m

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

  2. Các lệnh được tô màu thông qua các hook

  3. Tô sáng cú pháp tô màu của lệnh "list".

Tất cả các ví dụ có sẵn tại các bài đăng trên blog sau đây được viết bởi Michael Kelleher:

"Làm đẹp GDB", ngày 12 tháng 5 năm 2010 (thông qua archive.org)

"Đánh dấu cú pháp GDB thử nghiệm", ngày 15 tháng 5 năm 2010 (thông qua archive.org)


14
Các liên kết bị hỏng.
John Carter

7
@Mike: sẽ rất hữu ích khi đăng nội dung của các liên kết đó tại đây vì trang web không còn truy cập được nữa và robot.txt đã ngăn không cho archive.org lập chỉ mục.
Lucian Adrian Grijincu

1
Bạn có thể lấy thông tin liên quan tại đây: sourceware.org/gdb/cản/onlinesocs/gdb/Prompt.html
musiphil

1
Các liên kết hiện được trỏ đến bộ đệm archive.org của các bài đăng trên blog.
Alex Quinn

1
@Mike, có vẻ như bạn là tác giả của các bài đăng trên blog; nếu vậy, bạn nên tiết lộ điều đó trong câu trả lời.
David Z

13

Mới trong GDB 8.3 sắp tới !

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS

Kiểu dáng thiết bị đầu cuối hiện có sẵn cho CLI và TUI. GNU Source Highlight cũng có thể được sử dụng để cung cấp kiểu dáng của các đoạn mã nguồn. Xem các lệnh "thiết lập kiểu", bên dưới, để biết thêm thông tin.

ảnh chụp màn hình của gdb 8.2.91.20190401-23.fc30


Câu trả lời hay nhất đến nay! Bạn có thể tìm thấy ở đây một hướng dẫn về cách cài đặt gdb 8.3 Medium.com/@simonconnah/ , lưu ý rằng máy của bạn cần ít nhất 512 MB RAM, nếu không, gcctrình biên dịch sẽ bắt đầu chuyển rác.
người dùng

7
#into .gdbinit
shell mkfifo /tmp/colorPipe

define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end 

define hookpost-disassemble
hookpost-list
end 

define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end 

define hookpost-list
set logging off 
set logging redirect off 
shell sleep 0.1s
end 

define hook-quit
shell rm /tmp/colorPipe
end 

define re
hookpost-disassemble
echo \033[0m
end 
document re
Restore colorscheme
end 

Cảnh báo: Lỗi. Không hỗ trợ TUI, 'chế độ người dùng' hack.

Tìm thấy phần chính ở đây và sửa đổi nó một chút. Cần làm nổi bật, lọc c ++. Nếu màu bị rối thì lệnh re.


7

cgdb tốt hơn nhiều gdb -tui


Đã đồng ý. Các dòng đơn giản được in bởi chương trình của tôi đã chuyển giao bảng điều khiển của gdb -tui. Điều này không xảy ra dưới cgdb. Cảm ơn vì tiền hỗ trợ!
Randall Cook


4

Tôi muốn làm nổi bật như sau: nhấn mạnh các dòng của dấu vết ngăn xếp thuộc về các tệp nguồn của tôi (chứ không phải các thư viện).

Giải pháp là sử dụng gdb-python (trên MSYS; trên Linux thường gdbđi kèm với Python đã tích hợp sẵn?), Hook backtrace, sử dụng

python stack_trace = gdb.execute('backtrace', False, True')

Sau đó xử lý stack_tracevới biểu thức của Python và in chúng ra. Màu đậm và các màu khác đạt được bằng một chức năng như thế này:

def term_style(*v):
    """1 is bold, 30--37 are the 8 colours, but specifying bold may also
    change the colour. 40--47 are background colours."""
    return '\x1B['+';'.join(map(str, v))+'m'

#Use like this:
print term_style(1) + 'This will be bold' + term_style(0) #Reset.
print term_style(1,30) + 'This will be bold and coloured' + term_style(0)
print term_style(1,30,40) + 'Plus coloured background' + term_style(0)

Một ví dụ hoạt động sử dụng hook - ngay cả khi tối thiểu - có lẽ sẽ được chào đón nhiều hơn.
Hi-Angel

4

Một sự kết hợp tốt khác của màu sắc được đưa ra bởi cấu hình này . Nó làm cho việc kiểm tra backtraces dễ dàng hơn nhiều. Để sử dụng nó, chỉ cần lưu tệp đó dưới dạng ~/.gdbinitvà chạy gdb bình thường


Cảm ơn, đây chính xác là những gì tôi đang tìm kiếm. Tôi đã xem xét một ứng dụng đa luồng với một ngăn xếp cuộc gọi dài và điều này là hoàn hảo cho những backtraces đó.
Johan Bjäreholt

-2

bạn có thể có được bất cứ màu gì bạn muốn;

# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal
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.