Tôi có một con trỏ trong GDB, làm thế nào tôi có thể tìm ra nơi nó được phân bổ lần đầu tiên trên heap?Trong GDB, làm thế nào để tìm ra ai đã mua một địa chỉ trên heap?
Trong WinDBG, điều này có thể được thực hiện bằng !heap -p -a <0x12345678>
sau khi bật gflags /i <*exe> +ust
Kể từ Valgrind có thể cho tôi biết nơi bộ nhớ được phân bổ (khi nó phát hiện một số rò rỉ), tôi đoán đây cũng là có thể?
(Điều này là không về watchpoint. Đây được cho tình huống mà tôi ngẫu nhiên đột nhập vào Trong GDB, ứng dụng, hãy nhìn vào một con trỏ và muốn biết "những người tạo ra tác phẩm này của bộ nhớ"?)
Sử dụng gỡ lỗi ngược trong GDB là một cách rất mới và có lẽ cách chính xác cách để giải quyết vấn đề này. Tôi gặp phải một số vấn đề với cách tiếp cận đó với GDB 7.1 - phiên bản ổn định mới nhất. Đảo ngược gỡ lỗi là một tính năng khá mới trong GDB vì vậy tôi cần phải kiểm tra HEAD (7.2) để sửa chữa nó.
Nó có thể nói điều gì đó về sự trưởng thành của cách tiếp cận GDB nhưng tôi nghĩ rằng nó chắc chắn nên được sử dụng khi nó trưởng thành hơn. (Tính năng tuyệt vời!)
Cảm ơn! Cả hai cách tiếp cận của bạn và ks1322 có vẻ hợp lệ. Đó là sâu sắc để biết về mtrace và gỡ lỗi phân bổ glib. Mặt khác, tôi cảm thấy cách tiếp cận của ks1332 thông minh hơn và có lẽ gần gũi hơn với GDB (như vậy là tiêu đề câu hỏi). Tôi sẽ thử nghiệm với cả hai và xem cái nào tốt hơn trong thực tế trước khi chọn một câu trả lời đúng. – kizzx2