sprof falha ao gerar perfil plano para minha biblioteca compartilhada: Inconsistência detectada por ld.so

1

Não consigo gerar um resultado de profiling simples usando sprof no Ubuntu 16.04.02 (assim como 14.04.01). Aqui está um exemplo reproduzível, adaptado de man sprof .

Primeiro, crie um diretório para o experimento e, em seguida, crie os arquivos prog.c e libdemo.c dentro dele:

// 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);
       }

Agora, abra um terminal e altere o diretório para o criado acima e execute o seguinte script de shell:

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

Eu recebo um erro:

Inconsistency detected by ld.so: dl-open.c: 717: _dl_open: Assertion '_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT' failed!

libdemo.so.profile foi gerado sem problemas, mas sprof não consegue processá-lo.

Eu encontrei este segmento de estouro de pilha O que está causando sprof para reclamar sobre" inconsistência detectada por ld.so "? , mas não oferece uma solução. Eu quero que sprof funcione!

Este problema depende das distribuições do Linux? Eu vi um tópico em 2016, em que sprof foi bem-sucedido: sprof flat a coluna do nome do perfil tem formato feio .

Falando francamente, não sei qual é o melhor fórum para postar essa pergunta. Parece uma questão de programação que pertence ao Stack Overflow , mas o programa C e a criação de perfil são corretos; é apenas sprof que falha em processá-lo no estágio final, que deve ser um problema relacionado ao Linux. Então, se esse problema é independente das distribuições Linux, eu devo perguntar sobre Unix & Linux , mas se isso ocorrer apenas no Ubuntu, eu deveria criá-lo aqui em ask ubuntu . Bem, sinta-se à vontade para migrar para o melhor lugar como achar melhor; Eu não tenho nenhuma pista sobre isso.

    
por 李哲源 08.08.2017 / 12:22

0 respostas