В GDB как разрешить дубликаты символов - PullRequest
5 голосов
/ 19 июля 2011

У меня есть глобальная переменная, имя которой содержит несколько символов, и я хочу напечатать все из них. Пример:

(gdb) info var g_reallocCount
All variables matching regular expression "g_reallocCount":

File sv.c:
long int g_reallocCount;
long int g_reallocCount;
long int g_reallocCount;
long int g_reallocCount;

когда я пытаюсь использовать «print g_reallocCount», я получаю только один результат, и это не тот, который мне нужен.

Я считаю, что причина, по которой у меня есть несколько символов, заключается в том, что меняющаяся статическая библиотека связана с несколькими загруженными модулями. В настоящее время я не уверен, смогу ли я изменить этот факт.

спасибо

1 Ответ

1 голос
/ 01 августа 2011

Редактировать : по какой-то причине я не смог изначально рассмотреть более простой путь ... предполагая связь c.

(gdb) shell nm /path/to/stuff | grep g_reallocCount | cut -d' ' -f1 >>foo
(gdb) shell cat foo | awk '{print "p *0x" $0}' >foo.gdb
(gdb) source foo.gdb
$4 = 0
$5 = 0
$6 = 0

оригинальный ответ, аналогичная предпосылка: из-за отсутствия лучшей идеи, вы можете попробовать скопировать двоичный файл / библиотеку и удалить из него символы отладки с помощью команды strip, gdb выведет адрес символа в 'info var' и вы можете напечатать его с помощью print * 0xaddr

IПридется патч для печати адреса переменной в 'info var', когда будут доступны символы отладки.

Если вы придумали минимальный тестовый сценарий для воспроизведения этого, рассмотрите возможность отправки его вGDB списки или прикрепление его к сообщению об ошибке.

Спасибо!

...