Как напечатать стек обратной трассировки функций, определенных в разделяемой библиотеке? - PullRequest
0 голосов
/ 03 ноября 2018

Я оптимизирую производительность некоторых кодов и обнаружил, что вызов func() в сторонней общей библиотеке выполняется слишком медленно каждые несколько минут. Например, если я звонил 10 раз в цикле, первый вызов был очень медленным по сравнению с другими вызовами. Через несколько минут я повторил ту же операцию и получил тот же результат. Я подозреваю, что основной причиной является отсутствие кэша (данные и инструкции). Поэтому, если я смогу загрузить инструкции в кэш до вызова этой функции, возможно, первый вызов этой функции будет быстрее, чем раньше.

Я планирую использовать memcpy() для доступа к адресу func() перед его вызовом. Но проблема в том, что func() вызывает другие функции, которые также определены в разделяемой библиотеке, и я не могу получить доступ к адресу этих функций.

Согласно этому вопросу: Как заставить backtrace () / backtrace_symbols () печатать имена функций? , я знаю, backtrace() / backtrace_symbols() можно использовать для печати стека backtrace, но так ли это возможна ли обратная трассировка стека печати при вызове функции в сторонней общей библиотеке?

Кстати: я был бы признателен за любые советы и предложения по предварительной загрузке инструкций для кэширования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...