Tôi đang gỡ lỗi chương trình trong gdb và tôi muốn chương trình dừng lại khi vùng bộ nhớ 0x08049000 đến 0x0804a000 được truy cập. Khi tôi cố gắng đặt các điểm ngắt bộ nhớ theo cách thủ công, gdb dường như không hỗ trợ nhiều hơn hai vị trí tại một thời điểm.Xem phạm vi bộ nhớ trong gdb?
(gdb) awatch *0x08049000
Hardware access (read/write) watchpoint 1: *0x08049000
(gdb) awatch *0x08049001
Hardware access (read/write) watchpoint 2: *0x08049001
(gdb) awatch *0x08049002
Hardware access (read/write) watchpoint 3: *0x08049002
(gdb) run
Starting program: /home/iblue/git/some-code/some-executable
Warning:
Could not insert hardware watchpoint 3.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.
Đã có câu hỏi được đặt ra và câu trả lời là có thể thực hiện điều này bằng valgrind. Thật không may câu trả lời không chứa bất kỳ ví dụ hoặc tham chiếu đến hướng dẫn valgrind, do đó, nó không phải là rất enlightning: How can gdb be used to watch for any changes in an entire region of memory?
Vì vậy: Làm thế nào tôi có thể xem toàn bộ khu vực bộ nhớ?
thực tế thú vị: breakpoint PowerPC đã dao động (? Nhưng không watchpoints): http://stackoverflow.com/questions/ 13410941/set-breakpoint-on-every-line-in-gdb/31658056 # 31658056 –
x86 hỗ trợ phạm vi đồng hồ nhỏ tối đa 8 byte: https://en.wikipedia.org/wiki/X86_debug_register –