The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"как определить какой библиотеке принадлежит функция."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"как определить какой библиотеке принадлежит функция."  +/
Сообщение от jl on 01-Окт-09, 00:45 
Добрый день.
Подскажите новичку.
Имеем прогу на С.
#include <stdio.h>
#include <ещё много всего>
......
Далее по тексту встречаю например функцию subnmrx_by_ss().
...
subnmrx_by_ss(buffer,1024);
...
Вопрос: какой лучший способ узнать из какой библиотеки эта функция? Я конечно могу сделать что-то вроде grep -R func_name ../libs/*. Но может быть есть вариант лучше? Может есть готовая утилитка, к-ая мне красиво напечатает обо всех включенных изве переменных/функциях/и т.д.
Другими словами хочется как можно быстрее понять откуда что-то взято в программе(к-ую кто-то писал несколько лет и она обросла за это время библиотеками и т.п.).
Заранее спасибо!
Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "как определить какой библиотеке принадлежит функция."  +/
Сообщение от Артур (??) on 01-Окт-09, 15:03 
если очень грубо, то когда в исходнике используется к-л внешняя библиотечная функция, можно узнать только три вещи: 1. что она внешняя, 2. что она используется, 3. в каком заголовочном файле (.h) она определена.

состав библиотек, используемых для проекта можно найти в makefile (если таковой есть). они будут указаны либо явно -- libfoo.a, либо неявно в виде ключей вида -lfoo. собрать все экспортируемые имена из библиотеки можно с помощью nm(1).

если же речь идет о том, в каком заголовочном файле имеется определение искомой функции, то наверное проще грепом пройтись по директориям, в которых смотрит компилятор. список таких мест тоже в makefile (ну и плюс /usr/include).

все сильно зависит от структуры проекта, больше инфы - точнее ответ.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "nm и таги"  +/
Сообщение от Вова on 01-Окт-09, 17:50 
>Вопрос: какой лучший способ узнать из какой библиотеки эта функция? Я конечно
>могу сделать что-то вроде grep -R func_name ../libs/*. Но может быть
>есть вариант лучше? Может есть готовая утилитка, к-ая мне красиво напечатает
>обо всех включенных изве переменных/функциях/и т.д.

есть nm, но она не всегда сможет помочь,

>Другими словами хочется как можно быстрее понять откуда что-то взято в программе(к-ую
>кто-то писал несколько лет и она обросла за это время библиотеками
>и т.п.).

выполни ctags -R директория_исходников заголовков  далее в виме set tags=tags и потом контрол+5 g по именам функций

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "nm и таги"  +/
Сообщение от Slavaz (ok) on 01-Окт-09, 18:05 
>выполни ctags -R директория_исходников заголовков  далее в виме set tags=tags и
>потом контрол+5 g по именам функций

Дополню :)

http://midnight-commander.org/wiki/doc/editor/codejump

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "nm и таги"  +/
Сообщение от jl on 03-Окт-09, 00:52 
>>выполни ctags -R директория_исходников заголовков  далее в виме set tags=tags и
>>потом контрол+5 g по именам функций
>
>Дополню :)
>
>http://midnight-commander.org/wiki/doc/editor/codejump

Спасибо всем! vim+ctags - это вещь!!!!!!! то о чем я мечтал. особенно :TlistOpen.
PS а в midnight'е не получилось у меня.. я его особо и не пользую, но всё же хотелось бы знать как заставить перейти его к нужной функции/переменной. по ссылке сказано "For jump to definition (find tag) you need position cursor at end of the word and press M-Enter". M - это как я понимаю Esc или Alt. Не работает.....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "nm и таги"  +/
Сообщение от Slavaz (ok) on 03-Окт-09, 01:19 
>PS а в midnight'е не получилось у меня.. я его особо и

Версия должна быть >= 4.7.0-pre1

>не пользую, но всё же хотелось бы знать как заставить перейти
>его к нужной функции/переменной. по ссылке сказано "For jump to definition
>(find tag) you need position cursor at end of the word
>and press M-Enter". M - это как я понимаю Esc или
>Alt. Не работает.....

Да, оно. Должно работать. Версию проверьте.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "nm и таги"  +/
Сообщение от jl on 03-Окт-09, 02:28 
>[оверквотинг удален]
>
>Версия должна быть >= 4.7.0-pre1
>
>>не пользую, но всё же хотелось бы знать как заставить перейти
>>его к нужной функции/переменной. по ссылке сказано "For jump to definition
>>(find tag) you need position cursor at end of the word
>>and press M-Enter". M - это как я понимаю Esc или
>>Alt. Не работает.....
>
>Да, оно. Должно работать. Версию проверьте.

Спасибо!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру