How can I use “watch” GDB?

前端 未结 3 1945
旧巷少年郎
旧巷少年郎 2020-12-20 15:52

I tried to watch the change of the \"int a\" by the command \"watch a\". However, the program does not stop, when it changes to 12. Why?

 /* FILE: test.c */
         


        
3条回答
  •  死守一世寂寞
    2020-12-20 16:19

    It may help to specify your platform, version of GDB, and exact sequence of GDB commands you used.

    Here is what I see (GDB appears to work just fine):

    $ gcc -g test.c
    
    $ gdb a.out
    GNU gdb (GDB) 6.8.50.20090430-cvs
    Copyright (C) 2009 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later 
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-unknown-linux-gnu".
    For bug reporting instructions, please see:
    ...
    (gdb) list
    1       #include 
    2       #include 
    3
    4       int main(int argc, char** argv){
    5         printf("Hello world\n");
    6
    7         int a = 12;
    8         a = 10;                                                                                                                                                                      
    9         return 0; 
    10      }
    11
    (gdb) b 5
    Breakpoint 1 at 0x4004a7: file test.c, line 5.
    (gdb) r
    
    Breakpoint 1, main (argc=1, argv=0x7fffffffdb28) at test.c:5
    5         printf("Hello world\n");
    (gdb) watch a
    Hardware watchpoint 2: a
    (gdb) c
    Hello world
    Hardware watchpoint 2: a
    
    Old value = 0
    New value = 12
    main (argc=1, argv=0x7fffffffdb28) at test.c:8
    8         a = 10;                                                                                                                                                                      
    (gdb) c
    Hardware watchpoint 2: a
    
    Old value = 12
    New value = 10
    main (argc=1, argv=0x7fffffffdb28) at test.c:9
    9         return 0; 
    (gdb) c
    
    Watchpoint 2 deleted because the program has left the block in
    which its expression is valid.
    0x00007ffff7ab3033 in exit () from /lib/libc.so.6
    (gdb) c
    
    Program exited normally.
    (gdb) q
    

提交回复
热议问题