Tôi đang cố gắng gỡ lỗi chương trình không có sẵn mã nguồn và tôi cần xem những gì nó đã lưu trữ trong chuỗi std ::. Tôi đã và đang tìm kiếm ở đây, và tôi đã tìm thấy một số thông tin về việc xuất các container STL, nhưng tất cả đều đề cập đến các biến, không có nguồn hoặc thông tin gỡ lỗi tất cả những gì tôi có là bộ nhớ bù của dữ liệu lớp. Có cách nào để làm điều này không?Làm thế nào để kiểm tra std :: string trong GDB mà không có mã nguồn?
12
A
Trả lời
22
Mọi hoạt động std::string
đều có con trỏ đến các ký tự thô trong đó ở đâu đó. Đối với g++ 4.x
, con trỏ đó ở mức bù đắp 0
vào chuỗi.
Nếu bạn biết rằng chuỗi nằm ở ví dụ: 0x7fffffffda88
, sau đó
print *(char**)0x7fffffffda88
là những gì bạn cần.
5
Có lẽ lựa chọn đơn giản nhất là sử dụng phương pháp c_str
, như trong:
print myStr.c_str()
Các vấn đề liên quan
- 1. Làm thế nào để kiểm tra String = Enum.Value?
- 2. Làm thế nào để mở tệp nguồn trong GDB TUI
- 3. GDB than phiền Không có nguồn nào
- 4. Làm thế nào để tránh kiểm tra chính tả mã nguồn trong MS Word?
- 5. Làm thế nào để kiểm tra xem lớp B có nguồn gốc từ họ lớp mẫu
- 6. Làm thế nào tôi có thể sở hữu một C++ std :: string char dữ liệu mà không cần sao chép và giữ std :: string object?
- 7. Làm thế nào để kiểm tra va chạm 2D mà không kiểm tra mọi đối tượng
- 8. Làm thế nào để dán mã nguồn để vim mà không có định dạng lỗi?
- 9. Làm thế nào để chuyển đổi std :: string thành NSString?
- 10. Làm thế nào để kiểm tra mã nguồn của một phương pháp python?
- 11. Làm thế nào để biến hệ thống :: String^thành std :: string?
- 12. Làm thế nào để sử dụng kiến để kiểm tra thẻ (TODO: vv) trong mã nguồn java
- 13. Làm thế nào để kiểm tra Mã C
- 14. Làm thế nào để kiểm tra "thêm" trong DAO mà không cần sử dụng "tìm" vv?
- 15. Làm thế nào để kiểm tra lambda trong C++ 11
- 16. Làm cách nào tôi có thể kiểm tra lát này của mảng này trong gdb?
- 17. Làm thế nào để kiểm tra thiết bị Android là thiết bị có nguồn gốc?
- 18. Làm thế nào để chuyển đổi CString và :: std :: string :: std :: wstring với nhau?
- 19. Kiểm tra tăng shared_ptr với gdb
- 20. Làm thế nào để kiểm tra đơn vị mã riêng mà không cần tái cấu trúc để phân lớp?
- 21. Làm thế nào để mã hóa mã nguồn Perl?
- 22. temporaries Tránh trong std :: bản đồ/std :: tra cứu unordered_map với std :: string key
- 23. Làm thế nào để loại bỏ một đĩa cứng mà không để lộ mã nguồn của tôi?
- 24. Làm cách nào để kiểm tra bài tập về mã nguồn cho bài đạo văn?
- 25. Làm thế nào để chuyển đổi std :: chrono :: time_point để std :: tm mà không sử dụng time_t?
- 26. Bạn làm cách nào để "kiểm tra" mã?
- 27. Kiểm tra loại có nguồn gốc (C++)
- 28. Làm thế nào để std :: string cấp phát bộ nhớ trong GCC với chương trình -fwhole?
- 29. Làm thế nào để đặt breakpoint trong lớp mà không có nguồn của nó?
- 30. Làm cách nào để kiểm tra giá trị trả lại của hàm trong GDB?
Cảm ơn bạn, mà làm việc. Một điều tôi muốn biết là làm thế nào tôi sẽ tìm một cái gì đó như thế ra bản thân mình. tức là đã cung cấp mã nguồn cho lớp 'X' làm cách nào để tôi tìm ra vị trí của các trường trong lớp đó? Cách duy nhất tôi có thể nghĩ đến vào lúc này là biên dịch ứng dụng thử nghiệm của riêng tôi và kiểm tra các con trỏ tôi được đưa ra (với offsetof, v.v.). – PeterBelm
Cách nhanh nhất để tìm ra bù đắp trên thực tế là biên dịch một chương trình thử nghiệm tầm thường bằng cách sử dụng lớp đã cho trong chế độ gỡ lỗi và kiểm tra bố cục và bố cục lớp trong GDB. Đó là chính xác những gì tôi đã làm để trả lời câu hỏi của bạn ;-) –
Như một sang một bên, nếu SSO được sử dụng như trong libC++ của clang, không có con trỏ như vậy cho các chuỗi nhỏ. ;-) – Deduplicator