Альтернатива ltrace, которая работает на двоичных файлах, связанных с `-z now`? - PullRequest
7 голосов
/ 23 апреля 2020

ltrace не работает на двоичных файлах, связанных с опцией -z now , которая используется по умолчанию в моей системе Ubuntu 19.10. Он работает только для двоичных файлов, связанных с -z lazy.

Есть ли альтернатива ltrace, которая выполняет ту же работу, но работает и для now двоичных файлов?

1 Ответ

2 голосов
/ 05 мая 2020

Вы можете использовать утилиту 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 .

...