首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么导致sprof抱怨“ld.so检测到的不一致”?

是什么导致sprof抱怨“ld.so检测到的不一致”?
EN

Stack Overflow用户
提问于 2011-06-02 23:56:41
回答 3查看 6.9K关注 0票数 20

我正在尝试使用sprof来分析一些软件(ossim),其中几乎所有的代码都在一个共享库中。我已经生成了一个分析文件,但是当我运行sprof时,我得到了以下错误:

代码语言:javascript
复制
> sprof /home/eca7215/usr/lib/libossim.so.1 libossim.so.1.profile -p > log
Inconsistency detected by ld.so: dl-open.c: 612: _dl_open: Assertion `_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT' failed!

我遵循的说明说我需要libc版本至少2.5-34,我有libc版本2.12.2 (Gentoo,内核2.6.36-r5)。

我找不到任何关于这个错误意味着什么的解释,或者(更有趣的是)如何修复它,唯一的半相关的谷歌结果是一个旧版本的Skype中的一个bug。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-07 04:36:18

我有点好奇,因为这在OpenSuse 12.x中还是有问题的。我本以为09年左右报告的bug现在应该已经修复了。我猜还没有人真正使用sprof。(或者可能dl-open太脆弱了,人们不敢碰它:-)

该问题归结为用作dlopen参数的__RTLD_SPROF标志。将任何简单程序调用dlopen或第二个arg的标志,您都会得到相同的失败断言。我使用了http://linux.die.net/man/3/dlopen底部的示例程序作为示例

代码语言:javascript
复制
handle = dlopen(argv[1], RTLD_LAZY | __RTLD_SPROF);

从我对dl-open.c的快速浏览可以看出,这标志着dl_open的一些功能短路。因此,断言中指定的r_flag不会设置为RT_CONSISTENT。

票数 7
EN

Stack Overflow用户

发布于 2019-12-11 20:27:32

在使用多个工作线程时,我在使用PyTorch DataLoader时遇到了这个错误。Python通过启动多个进程来执行多进程,其中一个进程在以只读模式读取文件时出现此错误(对于CIFAR10数据集)。只需重新运行脚本就解决了问题,所以我相信这是某种零星的、罕见的操作系统错误。使用PyTorch,如果您设置了num_workers=0,这也可能有助于解决错误。

下面是完整的错误,以防任何人感兴趣:

代码语言:javascript
复制
Inconsistency detected by ld.so dl-open.c   272 dl_open_worker  Assertion `_dl_debug_initialize (0, args->nsid)->r_state == RT_CONSISTENT' failed!
Traceback (most recent call last):
  File "/miniconda/envs/petridishpytorchcuda92/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 724, in _try_get_data
    data = self._data_queue.get(timeout=timeout)
  File "/miniconda/envs/petridishpytorchcuda92/lib/python3.6/queue.py", line 173, in get
    self.not_empty.wait(remaining)
  File "/miniconda/envs/petridishpytorchcuda92/lib/python3.6/threading.py", line 299, in wait
    gotit = waiter.acquire(True, timeout)
  File "/miniconda/envs/petridishpytorchcuda92/lib/python3.6/site-packages/torch/utils/data/_utils/signal_handling.py", line 66, in handler
    _error_if_any_worker_fails()
RuntimeError    DataLoader worker (pid 272) exited unexpectedly with exit code 127. Details are lost due to multiprocessing. Rerunning with num_workers=0 may give better error trace.
票数 3
EN

Stack Overflow用户

发布于 2019-06-25 23:42:18

如果你在使用Docker,可能会有另一种解释。在我的例子中,分析数据是从运行在Docker容器中的进程中生成的,我尝试从容器中运行sprof,但收到了与问题中描述的相同的错误。从主机(而不是容器)运行sprof解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6216979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档