По какой-то причине я использовал gdb-6.3 (он был у меня в PATH, и я этого не заметил).Но когда я попробовал с gdb-7.1, это сработало!
Начиная с gdb 7.0, вы можете наблюдать память, которая не принадлежит вам в данный момент.
Со следующим исходным кодом:
#include <stdlib.h>
#include <stdio.h>
#define SIZE 100
int* arr;
main()
{
int i;
arr = (int*)malloc(SIZE*sizeof(int));
if (arr == NULL) {
printf("Could not allocate SIZE(=%d)", SIZE);
}
for (i=0; i<SIZE; i++) {
arr[i] = i; /* So it changes from malloc */
}
free(arr);
}
Вы можете скомпилировать с помощью:
$ gcc -g -o debug main.c
, а затем отладить с помощью:
$ gdb debug
GNU gdb (GDB) 7.1
...
(gdb) watch arr[10]
Watchpoint 1: arr[10]
(gdb) run
Starting program: /remote/cats/gastonj/sandbox/debug/debug
Hardware watchpoint 1: arr[10]
Old value = <unreadable>
New value = 0
main () at main.c:14
14 if (arr == NULL) {
(gdb) cont
Continuing.
Hardware watchpoint 1: arr[10]
Old value = 0
New value = 10
main () at main.c:18
18 for (i=0; i<SIZE; i++) {
(gdb) cont
Continuing.
Program exited with code 01.
(gdb)
Надеюсь, это поможет кому-то еще.
ПРИМЕЧАНИЕ. Я пыталсядобавив это как комментарий в посте Нила, но поскольку он не был отформатирован, я предпочел написать ответ на мой вопрос.