sprof MAN 页面中的示例不起作用
Posted
技术标签:
【中文标题】sprof MAN 页面中的示例不起作用【英文标题】:Example in the sprof MAN page is not working 【发布时间】:2017-11-01 06:17:13 【问题描述】:我尝试使用 Sprof 分析进行测试。我尝试了 MAN 页面示例:https://github.com/makelinux/examples/tree/master/sprof,但我看不到页面中提到的输出,我收到错误
Inconsistency detected by ld.so: dl-open.c: 707: _dl_open: Assertion `_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT' failed!
$ sprof -V
sprof (Ubuntu GLIBC 2.23-0ubuntu9) 2.23
tried with Glibc-2.18 and 2.19 too
【问题讨论】:
manpages.ubuntu.com/manpages/xenial/man1/sprof.1.html 请提供您的代码。另见How to create a Minimal, Complete, and Verifiable example。 代码已经存在于手册页中 确认,谢谢。由于 Stack Overflow 向您隐藏了关闭原因:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。 谢谢 Jww,我刚刚开始处理这个问题,所以,我在论坛中记录了错误,因为其他人可能已经处理了这个问题。当时我没有得到任何意见。顺便说一句,我将按照您发送的链接中提到的步骤进行操作 【参考方案1】:这已在此处报告为 glibc 错误:
Inconsistency detected by ld.so: dl-open.c: 717: _dl_open: Assertion `_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT' failed!最好继续在那里进行进一步的讨论。
【讨论】:
当然,我做到了【参考方案2】:该错误仅发生在 sprof 的特殊加载中,因此当使用 sprof 标志 __RTLD_SPROF 加载对象时简单地禁用断言允许我在使用 sprof 的同时避免可能干扰正常共享对象加载机制的更改。编辑 glibc/elf/dl-open.c:707 到:
if (!(__glibc_unlikely (mode & __RTLD_SPROF)))
assert (_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT);
这适用于 glibc-2.20 并已发布到 https://sourceware.org/bugzilla/show_bug.cgi?id=22380
【讨论】:
以上是关于sprof MAN 页面中的示例不起作用的主要内容,如果未能解决你的问题,请参考以下文章