sprof не удается генерировать плоское профилирование для моей общей библиотеки: Несоответствие обнаруживается ld.so

Я не могу генерировать плоское профильное использование результата sprof в Ubuntu 16.04.02 (а также 14.04.01). Вот восстанавливаемый пример, адаптированный от man sprof.

Сначала создайте каталог для эксперимента, затем создайте prog.c и libdemo.c файлы внутри:

// prog.c
       #include <stdlib.h>

       void x1(void);
       void x2(void);

       int
       main(int argc, char *argv[])
       {
           x1();
           x2();
           exit(EXIT_SUCCESS);
       }

// libdemo.c
       #include <unistd.h>

       void
       consumeCpu1(int lim)
       {
           int j;

           for (j = 0; j < lim; j++)
            getppid();
       }

       void
       x1(void) {
           int j;

           for (j = 0; j < 100; j++)
            consumeCpu1(200000);
       }

       void
       consumeCpu2(int lim)
       {
           int j;

           for (j = 0; j < lim; j++)
            getppid();
       }

       void
       x2(void)
       {
           int j;

           for (j = 0; j < 1000; j++)
            consumeCpu2(10000);
       }

Теперь откройте терминал и каталог изменения к вышеупомянутому созданному, затем выполните следующий сценарий оболочки:

cc -g -fPIC -shared -o libdemo.so libdemo.c
cc -g -o prog prog.c -L. -ldemo

export LD_PROFILE=libdemo.so
export LD_PROFILE_OUTPUT=$(pwd)    ## use current directory
rm -f libdemo.so.profile
LD_LIBRARY_PATH=. ./prog
sprof -p libdemo.so libdemo.so.profile

Я получаю ошибку:

Несоответствие обнаруживается ld.so: dl-open.c: 717: _dl_open: Утверждение '_dl_debug_initialize (0, args.nsid)-> r_state == RT_CONSISTENT' перестал работать!

libdemo.so.profile был сгенерирован без проблемы, но sprof сбои для обработки его.

Я нашел этот поток Переполнения стека, Что заставляет sprof жаловаться на “несоответствие, обнаруженное ld.so”?, но это не предлагает решения. Я хочу добраться sprof работать!

Действительно ли эта проблема зависит от дистрибутивов Linux? Я видел поток на 2016, где sprof успешно: sprof плоский столбец имени профиля имеет ужасный формат.

Откровенно говоря, я не знаю, который является лучшим форумом для регистрации этого вопроса. Это похоже на вопрос о программировании, который принадлежит Переполнению стека, но программе C и профильным выполнениям хорошо; это справедливо sprof этому не удается обработать его в заключительном этапе, который должен быть связанной с Linux проблемой. Затем, если эта проблема независима на дистрибутивах Linux, я должен спросить об относительно Unix & Linux, но если она только происходит на Ubuntu, я должен повысить ее здесь на, спрашивает человечность. Ну, не стесняйтесь перемещать его в лучшее место, поскольку Вы считаете целесообразным; у меня нет подсказки о нем вообще.

1
задан 8 August 2017 в 13:22

0 ответов

Другие вопросы по тегам:

Похожие вопросы: