4
我正在調試具有段錯誤的C應用程序。我已經確定了導致問題的變量。但是,我還不知道,什麼時候分配了變量,以致導致分段錯誤。GDB:指定斷點以更改符號
如果一個新值被分配給一個現有的變量,有沒有辦法在GDB中設置斷點?
我正在調試具有段錯誤的C應用程序。我已經確定了導致問題的變量。但是,我還不知道,什麼時候分配了變量,以致導致分段錯誤。GDB:指定斷點以更改符號
如果一個新值被分配給一個現有的變量,有沒有辦法在GDB中設置斷點?
你需要一個watchpoint
:
(gdb) watch my_var
#include <stdio.h>
struct foo {
int i[12];
int j;
};
int main(void) {
struct foo foo = {{0}};
int *p;
p = foo.i;
p[12] = 42;
printf("j is %d\n", foo.j);
return 0;
}
gdb ./a.out [...] Reading symbols from a.out...done. (gdb) break main Breakpoint 1 at 0x40052c: file 6469109.c, line 9. (gdb) run Starting program: a.out Breakpoint 1, main() at 6469109.c:9 9 struct foo foo = {{0}}; (gdb) watch foo.j Hardware watchpoint 2: foo.j (gdb) cont Continuing. Hardware watchpoint 2: foo.j Old value = -7936 New value = 0 0x0000000000400545 in main() at 6469109.c:9 9 struct foo foo = {{0}}; (gdb) cont Continuing. Hardware watchpoint 2: foo.j Old value = 0 New value = 42 main() at 6469109.c:14 14 printf("j is %d\n", foo.j); (gdb) quit A debugging session is active. Inferior 1 [process 572] will be killed. Quit anyway? (y or n) y
+1:我喜歡看到'foo.j'通過的程序化誤差變化的例子。我希望我能+2這個。 – dolphy