Re: Viewing the address of an array in gdb
Pedro Alves <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
On 07/06/2018 01:00 PM, Pedro Alves wrote: > On 07/06/2018 12:51 PM, Pedro Alves wrote: >> On 07/06/2018 04:33 AM, Mahmood Naderan via gdb wrote: >>> Hi, >>> I have define "char buffer[100]" in a C code. Trying to view the location of buffer in GDB, I see this > > Ah, I missed the "you have defined a buffer yourself" part. > > So what seems to be happening is that there's another symbol also > called "buffer" in glibc: > > (gdb) info symbol buffer > buffer in section .bss of /lib64/libc.so.6 > > and gdb is picking that symbol instead of yours. > > I can reproduce this if I compile a small program without debug info, > but with debug info (-g), it works as you'd expect. > > I don't think we have syntax to disambiguate this, like > 'libc.so.6'::buffer' vs 'program'::buffer, or program#buffer some > such, unfortunately. If you can't change the program, you can work around this by unloading the shared library symbols, so that gdb sees the program's symbol again. E.g.: (gdb) start Temporary breakpoint 1 at 0x40048b Starting program: /home/pedro/tmp/buffer Temporary breakpoint 1, 0x000000000040048b in main () (gdb) info symbol &buffer buffer in section .bss of /lib64/libc.so.6 (gdb) nosharedlibrary (gdb) info symbol &buffer buffer in section .bss (gdb) x /30x &buffer 0x601040 <buffer>: 0x00000000 0x00000000 0x00000000 0x00000000 0x601050 <buffer+16>: 0x00000000 0x00000000 0x00000000 0x00000000 0x601060 <buffer+32>: 0x00000000 0x00000000 0x00000000 0x00000000 0x601070 <buffer+48>: 0x00000000 0x00000000 0x00000000 0x00000000 0x601080 <buffer+64>: 0x00000000 0x00000000 0x00000000 0x00000000 0x601090 <buffer+80>: 0x00000000 0x00000000 0x00000000 0x00000000 0x6010a0 <buffer+96>: 0x00000000 0x00000000 0x00000000 0x00000000 0x6010b0: 0x00000000 0x00000000 (gdb) Thanks, Pedro Alves