Отслеживать все звонки из программы? - PullRequest
3 голосов
/ 29 апреля 2011

Программа установлена ​​на 2 компьютера. Определенная библиотека работает правильно на одном компьютере, но не работает на другом. Интересно, отсутствует ли библиотека?

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

Ответы [ 4 ]

5 голосов
/ 29 апреля 2011

Да strace будет обнаруживать вызовы из загруженных библиотек.

Если вы хотите отслеживать вызовы библиотеки (не системные), используйте ltrace

3 голосов
/ 30 апреля 2011

Звучит так, как будто вы хотите просмотреть график вызовов функций вашего приложения , то есть какие функции вызывают друг друга, в какой библиотеке они живут и т. Д. Если это так, вы можете проверить инструмент callgrind (который является частью valgrind).

Вот пример, который использует callgrind для профилирования некоторого кода .

Как только вы используете callgrind для генерации данных профиля для вашего приложения, загрузите его в Kcachegrind для визуализации. Это просто «укажи и щелкни»: выделение функции, просмотр звонящих / звонящих, просмотр графика звонков и т. Д. Я нашел это весьма полезным в подобных обстоятельствах.

0 голосов
/ 12 марта 2019

Для программ, использующих Clang для компиляции, попробуйте получить трассировку вызовов программ с Xray.Он эвристически обрабатывает часть программы и имеет очень низкие накладные расходы времени выполнения.

0 голосов
/ 29 апреля 2011

Чтобы проверить, отсутствуют ли библиотеки, запустите ldd /full/path/to/program

...