Как использовать GDB для определения функции, которой соответствует адрес памяти

Я использую программу проверки кучи Google для отслеживания утечки памяти. Она дает мне трассировку стека, например:

Leak of 21 bytes in 1 objects allocated from:                                                                                                                                                               
    @ 0xf6088241                                                                                                                                                                                               
    @ 0xf60890d2                                                                                                                                                                                               
    @ 0xf6089246                                                                                                                                                                                               
    @ 0x8054781                                                                                                                                                                                                
    @ 0x8054862                                                                                                                                                                                                
    @ 0xf684ee76                                                                                                                                                                                               
    @ 0xf684f343                                                                                                                                                                                               
    @ 0x804be4c                                                                                                                                                                                                
    @ 0x80544f6                                                                                                                                                                                                
    @ 0xf5e52bb6                                                                                                                                                                                               
    @ 0x804b101  

Как мне d определить, каким функциям / строкам кода соответствуют эти адреса памяти?

22
задан flumpb 3 October 2011 в 19:50
поделиться

2 ответа

Используйте команду info symbol gdb. 16 Изучение таблицы символов .

info symbol addr

Распечатать название символа, который хранится по адресу addr. Если ни один символ не хранится точно в адресе, gdb печатает ближайший символ и смещение от него:

(gdb) info symbol 0x54320
_initialize_vx + 396 in section .text

Это противоположно команде info address. Вы можете использовать его, чтобы узнать имя переменной или функции по ее адресу.

Для динамически связанных исполняемых файлов также выводится имя исполняемой или разделяемой библиотеки, содержащей символ:

(gdb) info symbol 0x400225
_start + 5 in section .text of /tmp/a.out
(gdb) info symbol 0x2aaaac2811cf
__read_nocancel + 6 in section .text of /usr/lib64/libc.so.6
38
ответ дан 29 November 2019 в 04:39
поделиться

В первоначальном вопросе спрашивалось, как это сделать в GDB:

# NOT what you want; note the lack of '*':
(gdb) info symbol 0xfde09edc
blah() + 388 in section .text of /tmp/libblah.so

# IS what you want; note the presence of '*':
(gdb) info line *0xfde09edc
Line 91 of "blah.cc"
   starts at address 0xfde09ebc <blah()+356>
   and ends at 0xfde09ee4 <blah()+396>

* необходимо для info line и не должно использоваться для info symbol.

Вы также можете использовать команду disassemble с ее флагом /m:

(gdb) disassemble /m 0xfde09edc

... хотя она довольно многословна и info line дает именно то, что было запрошено.

2
ответ дан 29 November 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: