Вы можете использовать утилиту uftrace, написанную Namhyung Kim . Он доступен как пакет в Ubuntu , хотя я собрал код из основной ветки вручную, чтобы убедиться, что я использую новейшую версию vanilla. Пример main.c
:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
puts("Hello World");
return EXIT_SUCCESS;
}
Сборка с -z now
:
gcc -O2 main.c -z now -o main
ltrace
не работает:
$ ltrace ./main
Hello World
+++ exited (status 0) +++
Но uftrace
делает:
$ LD_LIBRARY_PATH=~/uftrace/libmcount ~/uftrace/uftrace -a --force ./main
Hello World
# DURATION TID FUNCTION
58.231 us [ 16283] | puts("Hello World") = 12;
См. эту ветку на сайте проекта на Github: отслеживание вызовов библиотеки, даже если у нее нет PLT # 592 .