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

Я не могу создать плоский результат профилирования, используя 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. Ну, не стесняйтесь переносить его в лучшее место по своему усмотрению; Я вообще не знаю этого.

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

0 ответов

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

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