Search code examples
cgdb

GDB print all values in char array


I am storing various filenames in my array which are partitioned by null bytes. When debugging, I am only able to see the first filename. So, for instance if my array is like this: hello.txt00000hello2.txt, I am only able to see hello.txt. How can I print the entire array? I have trouble finding such command elsewhere.


Solution

  • You can use x/999bc, where 999 is the size of your array, for instance:

    paul@thoth:~/src/sandbox$ gdb ./str
    GNU gdb (GDB) 7.4.1-debian
    Copyright (C) 2012 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    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-linux-gnu".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>...
    Reading symbols from /home/paul/src/sandbox/str...done.
    (gdb) list
    1   int main(void) {
    2       char * p = "hello\0world\0hahaha";
    3       return 0;
    4   }
    5   
    (gdb) b 3
    Breakpoint 1 at 0x4004b8: file str.c, line 3.
    (gdb) run
    Starting program: /home/paul/src/sandbox/str 
    
    Breakpoint 1, main () at str.c:3
    3       return 0;
    (gdb) print p
    $1 = 0x40056c "hello"
    (gdb) x/19bc p
    0x40056c:   104 'h' 101 'e' 108 'l' 108 'l' 111 'o' 0 '\000'    119 'w' 111 'o'
    0x400574:   114 'r' 108 'l' 100 'd' 0 '\000'    104 'h' 97 'a'  104 'h' 97 'a'
    0x40057c:   104 'h' 97 'a'  0 '\000'
    (gdb)