Я не могу создать плоский результат профилирования, используя sprof в Ubuntu 16.04.02 (а также 14.04.01). Вот пример воспроизводимости, адаптированный из man sprof.
Сначала создайте каталог для эксперимента, затем создайте файлы prog.c и libdemo.c внутри:
// prog.c
#include
void x1(void);
void x2(void);
int
main(int argc, char *argv[])
{
x1();
x2();
exit(EXIT_SUCCESS);
}
// libdemo.c
#include
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: Assertion `_dl_debug_initialize (0, args.nsid) -> r_state == RT_CONSISTENT 'не удалось!libdemo.so.profile был сгенерирован без проблем, но sprof не смог обработать его.
Я нашел этот поток переполнения стека man sprof , но он не предлагает решения. libdemo.so.profile был сгенерирован без проблем, но sprof не смог обработать его.
Является ли эта проблема зависимой от дистрибутивов Linux? Я видел поток в 2016 году, где sprof успешно: столбец с плоским профилем sprof имеет уродливый формат.
Честно говоря, я не знаю, какой из лучших форумов для публикации этого вопроса. Похоже, что вопрос программирования, относящийся к столбцу с именем плоского профиля sprof, имеет уродливый формат , но программа C и профилирование работают в порядке; это просто sprof, который не может обработать его на заключительном этапе, что должно быть проблемой, связанной с Linux. Тогда, если эта проблема не зависит от дистрибутивов Linux, я должен спросить об Unix & amp; Linux, но если это происходит только на Ubuntu, я должен поднять его здесь, чтобы спросить ubuntu. Ну, не стесняйтесь переносить его в лучшее место по своему усмотрению; Я вообще не знаю этого.