Hầu hết các lệnh phức tạp / hữu ích cho trình gỡ lỗi gdb [đã đóng]


138

Bạn có thể đăng các lệnh phức tạp và hữu ích nhất của bạn trong khi bạn chạy trình gỡ lỗi như gdb hoặc dbx.


Tôi thấy tài liệu này là tốt. scc.ustc.edu.cn/zlsc/sugon/intel/debugger/cl/ Kẻ
Rick

Câu trả lời:


134
  1. backtrace full : Hoàn thành backtrace với các biến cục bộ
  2. lên , xuống , khung : Di chuyển qua các khung
  3. xem : Đình chỉ quá trình khi một điều kiện nhất định được đáp ứng
  4. thiết lập in đẹp trên : In mã nguồn C được định dạng đẹp
  5. đặt đăng nhập : Đăng nhập phiên gỡ lỗi để hiển thị cho người khác để được hỗ trợ
  6. đặt mảng in trên : In mảng khá
  7. kết thúc : Tiếp tục cho đến khi kết thúc chức năng
  8. bậttắt : Bật / tắt điểm dừng
  9. Tbreak : Phá vỡ một lần, và sau đó loại bỏ điểm dừng
  10. Trong đó : Số dòng hiện đang được thực thi
  11. Thông tin địa phương : Xem tất cả các biến cục bộ
  12. Thông tin args : Xem tất cả các đối số chức năng
  13. danh sách : xem nguồn
  14. rbreak : break on function khớp với biểu thức chính quy

7
info locals- Xem tất cả các biến cục bộ; danh sách - xem nguồn; rbreak - break trên hàm khớp với biểu thức chính quy.
Paul Biggar

nguồn / đường dẫn / đến / macro / tệp Và tất cả các macro tiện lợi của tôi đều ở đó để giúp tôi gỡ lỗi trong vài giây.
Sudhanshu

1
set print object oncho các phần tử đa hình và set print elements 0là hai lệnh tôi sử dụng rất thường xuyên. Khá hữu ích.
Kiril Kirov

1
Ngoài ra, t a a bt(ý nghĩa thread apply all backtrace). Có thể được sử dụng với (gần như) tất cả các lệnh khác. Đặc biệt hữu ích với bt full.
Kiril Kirov

101

Bắt đầu gdb với giao diện người dùng văn bản

gdb -tui

21
Tôi không thể tin rằng tính năng này đã thoát khỏi tôi trong suốt những năm qua. Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn!
DevSolar

Cảm ơn bạn đã tiết kiệm rất nhiều thời gian của tôi .. Wonderfull ....
sujin

1
Và một điều khác: <trừ> RET
SullX

1
hoặc sử dụng cgdb
Patryk

tính năng rất tốt đẹp. Bỏ lỡ điều này cho đến nay ...
PraveenMax

45

Bắt đầu từ gdb 7.0, có gỡ lỗi đảo ngược , vì vậy các lệnh yêu thích mới của bạn là:

* reverse-continue ('rc') -- Continue program being debugged but run it in reverse
* reverse-finish -- Execute backward until just before the selected stack frame is called
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls.
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines.
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line
* reverse-stepi -- Step backward exactly one instruction
* set exec-direction (forward/reverse) -- Set direction of execution.

21

Thay vì khởi chạy GDB với thông số "-tui", bạn cũng có thể chuyển sang chế độ văn bản sau một thời gian sử dụng bằng cách nhập "wh".


3
Ctrl-a a để chuyển về chế độ xem dòng lệnh 'bình thường'!
Kevin

2
"- 'có thể được sử dụng ngay từ' wh '.
Càng

6
Ctrl-a a? Có phải là một trò đùa? Trông giống như tmux/ screenlệnh hơn. Và không làm việc cho tôi. Nó phải là một trong như mỗi docs : C-x C-a, C-x a, C-x A.
x-yuri

Đó là thực sự C-x a. Bạn cũng có thể chuyển đổi chế độ xem với C-x 1C-x 2khi ở chế độ tui để xem lắp ráp (nếu cần).
Sam Whitlock

16

thread apply all bthoặc thread apply all print $pc: Để tìm hiểu nhanh những gì tất cả các chủ đề đang làm.


Đó là mệnh lệnh tôi đã tìm kiếm từ lâu! Thật là khó chịu khi kiểm tra tất cả 30 chủ đề một!
tothphu


6

Sử dụng -command=<file with gdb commands>tùy chọn trong khi bắn gdb. Giống như-x <command file> . Tệp lệnh này có thể chứa các lệnh gdb như điểm dừng, tùy chọn, v.v ... Hữu ích trong trường hợp một thực thi cụ thể cần được đưa qua các lần chạy gỡ lỗi liên tiếp bằng gdb.


Bạn cũng có thể sử dụng -iextùy chọn để thêm các lệnh riêng lẻ trên dòng lệnh gdb.
doug65536

5

scripting gdb là một mẹo hay, ngoài ra tôi thích cài đặt bật / tắt bộ lập lịch để ngăn việc chạy các luồng khác khi bạn đang bước vào một.


1
Làm thế nào để bạn thiết lập khóa lập lịch?
deft_code

3
set scheduler-locking onbên trong gdb
Ben

Làm thế nào để bạn làm điều này mặc định? Tôi đã thử nó .gdbinit nhưng gdb in /home/omry/.gdbinit:1: Lỗi trong tệp lệnh có nguồn gốc: Target 'Không' không thể hỗ trợ lệnh này.
Omry Yadan

4
  • Sử dụng .gdbinit (khởi động tệp nơi bạn có thể viết macro và gọi từ gdb). Đặt .gdbinit trong thư mục chính của bạn để nó được chọn mỗi khi gdb được tải
  • thông tin chủ đề để liệt kê tất cả các chủ đề đang hoạt động và f (#) -> # số chủ đề bạn muốn chuyển sang

  • đôi khi tôi sử dụng gdb để chuyển đổi từ hex sang thập phân hoặc nhị phân, rất tiện dụng thay vì mở máy tính

    • p / d 0x10 -> cho số thập phân tương đương 0x10
    • p / t 0x10 -> nhị phân tương đương 0x10
    • p / x 256 -> hex tương đương với 256

4

Thay vì bắt đầu gdb với tùy chọn -tui để xem quy trình con có chứa màn hình làm nổi bật dòng mã thực thi trong chương trình của bạn, hãy nhảy vào và ra khỏi tính năng này với Cx o và Cx a. Điều này hữu ích nếu bạn đang sử dụng tính năng này và những gì tạm thời không sử dụng nó để bạn có thể sử dụng mũi tên lên để nhận lệnh trước đó.


2
bạn có thể thay đổi tiêu điểm thành cửa sổ lệnh bằng cách sử dụng focus cmdđể mũi tên lên / xuống hoạt động. Bạn chuyển lại bằng cách sử dụng focus src.
Nathan Fellman

3

Điều này có thể hữu ích, tôi chắc chắn rằng nó có thể được cải thiện mặc dù, xin chào mừng:

define mallocinfo
  set $__f = fopen("/dev/tty", "w")
  call malloc_info(0, $__f)
  call fclose($__f)

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.