Tôi muốn in toàn bộ chiều dài của chuỗi C trong GDB. Theo mặc định nó được viết tắt, làm cách nào để buộc GDB in toàn bộ chuỗi?Làm cách nào để in toàn bộ giá trị của chuỗi dài trong gdb?
Trả lời
set print elements 0
set print elements
number-of-elements
Thiết lập một giới hạn về số yếu tố của một mảng GDB sẽ in. Nếu GDB đang in một mảng lớn, nó sẽ dừng in sau khi nó đã in số phần tử được đặt bởi lệnh
set print elements
. Giới hạn này cũng áp dụng cho việc hiển thị các chuỗi. Khi GDB bắt đầu, giới hạn này được đặt thành 200.
Đặt số lượng các phần tử về 0 có nghĩa là việc in không giới hạn.
Miễn là chương trình của bạn ở trạng thái tốt, bạn cũng có thể call (void)puts(your_string)
để in nó thành thiết bị xuất chuẩn. Nguyên tắc tương tự áp dụng cho tất cả các chức năng có sẵn cho trình gỡ lỗi, thực sự.
Câu trả lời này thậm chí còn tốt hơn "thiết lập các yếu tố in 0" (vì mục đích của tôi) vì nó tôn trọng các ký tự trả về dòng mới/vận chuyển thay vì thoát chúng. – mhenry1384
Giải pháp tốt, nhưng không hoạt động khi cố gắng phân tích tệp kết xuất lõi – Elalfer
Duskwuff gợi ý rực rỡ, tôi ước tôi đã đọc trước khi tôi sao chép và dán nó vào cuộc gọi printf để có được kết quả không thoát.: D – nevelis
Có tùy chọn thứ ba: lệnh x, cho phép bạn đặt giới hạn khác cho lệnh cụ thể thay vì thay đổi cài đặt chung. Để in 300 ký tự đầu tiên của chuỗi, bạn có thể sử dụng x/300s your_string
. Đầu ra có thể khó đọc hơn một chút. Ví dụ in một kết quả truy vấn SQL trong:
(gdb) x/300sb stmt.c_str() 0x9cd948: "SELECT article.r"... 0x9cd958: "owid FROM articl"... ..
Tôi đã tự hỏi "x/300sb" có nghĩa là gì. Với sự trợ giúp của [cheat sheet (pdf)] (http://refcards.com/docs/peschr/gdb/gdb-refcard-a4.pdf), tôi đã dịch "x/300sb cstr" thành "eXamine 300 đơn vị (byte) của bộ nhớ tại địa chỉ cstr, được hiểu là một chuỗi NULL chấm dứt (S). Nếu chuỗi của bạn có chiều dài 100, thì bạn sẽ thấy rất nhiều rác, bởi vì tất cả 300 byte được in, cho dù chúng có ý nghĩa hay không. +1 tuy nhiên để giới thiệu tôi với 'x'! –
Chỉ cần để hoàn thành nó:
(gdb) p (char[10]) *($ebx)
$87 = "asdfasdfe\n"
Bạn phải cung cấp một độ dài, nhưng có thể thay đổi các đại diện của chuỗi:
(gdb) p/x (char[10]) *($ebx)
$90 = {0x61,
0x73,
0x64,
0x66,
0x61,
0x73,
0x64,
0x66,
0x65,
0xa}
Điều này có thể hữu ích nếu bạn muốn gỡ lỗi theo giá trị của chúng
Lệnh printf sẽ in hoàn tất strings:
(gdb) printf "%s\n", string
Sử dụng set elements ...
không phải lúc nào cũng là cách tốt nhất. Sẽ hữu ích nếu có một số khác biệt set string-elements ...
.
Vì vậy, tôi sử dụng các chức năng này trong .gdbinit tôi:
define pstr
ptype $arg0._M_dataplus._M_p
printf "[%d] = %s\n", $arg0._M_string_length, $arg0._M_dataplus._M_p
end
define pcstr
ptype $arg0
printf "[%d] = %s\n", strlen($arg0), $arg0
end
Hãy cẩn thận:
- Đầu tiên là C++ lib phụ thuộc vì nó truy cập các thành viên của std :: string, nhưng có thể dễ dàng điều chỉnh .
- Chỉ có thể sử dụng thứ hai trên một chương trình đang chạy khi chương trình gọi strlen.
phải là 'các phần tử in đã đặt ...' không phải là 'các phần tử được đặt' ... – NoahR
- 1. In tên `errno` thay vì giá trị trong GDB
- 2. Làm cách nào để kiểm tra giá trị trả lại của hàm trong GDB?
- 3. gdb - cách in kết quả đánh giá cho C++
- 4. Làm cách nào để đọc giá trị của tất cả thanh ghi bằng gdb?
- 5. Làm thế nào để làm cho gdb in ra tất cả các giá trị trong chế độ thập lục phân?
- 6. Làm thế nào để in chuỗi giá trị từ hành động breakpoint trong Xcode 4?
- 7. Làm cách nào để GDB không in các giá trị tham số chức năng khi "bước vào"?
- 8. Làm thế nào để in giá trị boolean trong Go?
- 9. Giá trị băm và giá trị băm in của Ruby
- 10. Làm cách nào để tìm chuỗi dài nhất trong Python?
- 11. Chuỗi con trong Java - dài tới một giá trị
- 12. Làm thế nào để in toàn bộ mảng NumPy?
- 13. Làm cách nào để thay đổi giá trị của biến toàn cục bên trong một hàm
- 14. Làm thế nào để xem giá trị của chuỗi dài bằng cách sử dụng NetBeans và x-gỡ lỗi?
- 15. Làm cách nào để xóa bộ đệm IN trong TSQL?
- 16. Làm thế nào để in toàn bộ dòng ra tiêu chuẩn và chuỗi
- 17. Chuỗi in được trỏ tới từ Đăng ký trong GDB
- 18. Cách so sánh giá trị dài bằng với Giá trị dài
- 19. Làm cách nào để in giá trị của cài đặt cấu hình git (core.autocrlf) trên Windows?
- 20. Nhận độ dài giá trị cột, không phải độ dài cột tối đa của giá trị
- 21. Làm thế nào để có được giá trị của biến toàn cầu trong jquery?
- 22. Làm thế nào để in giá trị giao diện điều khiển trong Eclipse của tôi?
- 23. Làm cách nào để cập nhật giá trị của một chuỗi @Autowired String trong Spring?
- 24. Làm thế nào để thay đổi giá trị đăng ký eflags trong GDB?
- 25. Làm thế nào để thiết lập chiều rộng của bộ nhớ GDB kiểm tra (x) hoặc in (p) lệnh?
- 26. Độ dài của giá trị chuỗi vượt quá độ dài được cấu hình trong ánh xạ/tham số
- 27. Trong R, làm cách nào để đặt giá trị đầu tiên của một vectơ dài thành các giá trị ngắn hơn?
- 28. In tên và giá trị của macro
- 29. Cách in biến <chưa hoàn thành> trong gdb
- 30. dataframes với chuỗi dài trong R In ấn
Ngày nay, bạn cũng có thể cần "đặt lặp lại 0", nếu không GDB sẽ bỏ qua các phần tử lặp lại của chuỗi/mảng. –