2013-04-05 2 views
0

Я печатаю стеки из своего кода c с помощью backtrace_symbols() (следующие инструкции на http://www.gnu.org/software/libc/manual/html_node/Backtraces.html). Тем не менее, я могу получить только адреса кадров стека в динамической библиотеке, хотя я создал библиотеку, используя -g -rdynamic.Как найти имя funcation по адресу в библиотеке

Теперь у меня есть работающий процесс, и у меня есть библиотека, как узнать, к какому методу соответствует каждый адрес кадра? Заранее спасибо.

Это 64-разрядный Linux.

Пример моей распечатке выглядит следующим образом:

Obtained 9 stack frames. 
/tmp/libexample.so [0x2aaabaae9771] 
/tmp/libexample.so [0x2aaabaae9828] 
/tmp/libexample.so [0x2aaabaaa8138] 
/tmp/libexample.so [0x2aaabaab2402] 
/tmp/libexample.so [0x2aaabaabd029] 
/tmp/libexample.so [0x2aaabaa1e23a] 
/tmp/libexample.so [0x2aaabaa24ded] 
/lib64/libpthread.so.0 [0x30b700677d] 
+0

Вы компилируете с включенными символами отладки? '-g' с GCC и Clang – GWW

+0

Да. С -g. Просто добавил, что с помощью редактирования. – May

ответ

1

Я думаю, что вы ищете функции dladdr.

+0

Я посмотрел на страницу пользователя dladdr. Похоже, вы можете получить адрес функции. В моем случае мне нужно идти наоборот. Есть ли инструмент командной строки? У меня все еще есть процесс, в котором загружена библиотека. – May

Смежные вопросы