需要帮助调试缓慢的 scons 运行时

2024-04-03

我正在使用 scons 构建两个项目。一个项目效果很好,而另一个(更复杂)项目则非常令人沮丧。这是我在为第二个项目运行 scons 时看到的内容:

S time scons
scons: Reading SConscript files ...
<<< Generates some code, output seen in console >>>
scons: done reading SConscript files.
scons: Building targets ...
<<< 30+ second delay, with no output >>>
<<< Building occurs, with output, only 2-3 seconds >>>
scons: done building targets.
<<< 15-20 second delay, no output to console >>>

real  0m54.600s
user  0m2.612s
sys   0m9.236s
$

所以它看起来读取 SConscript 文件的速度足够快,但是当它完成时,有一个 30 秒以上的巨大延迟,它似乎什么也没做。如果我在这里按 Ctrl-C,延迟仍然存在;在延迟过去之前,它不会处理 Ctrl-C 并终止运行。同样,在所有事情完成后,还有另一个神秘的延迟;这种延迟也是不可中断的。

我不知道发生了什么,但本应等待 4 秒的时间却等待了 54 秒,这真是令人沮丧!我一直无法找到一种方法让 scons 告诉我在这些延迟期间它在做什么。有谁知道如何获取有关其正在做什么的更多信息?

Update:我使用 profile= 选项运行 scons 来获取分析信息,然后打印出排序列表;以下是前几项:

2016 年 3 月 13 日星期日 17:46:04 scons.profile.data

     1253379 function calls (1208007 primitive calls) in 61.303 seconds

排序依据:内部时间、函数名称

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       41   32.778    0.799   32.783    0.800 {cPickle.loads}
        1   17.691   17.691   17.691   17.691 {cPickle.dump}
      456    5.337    0.012    5.337    0.012 {method 'read' of 'file' objects}
       24    2.844    0.118    2.844    0.118 {posix.waitpid}
        5    0.245    0.049    0.245    0.049 {built-in method poll}
   . . .
      230    0.016    0.000    0.029    0.000 {cPickle.dumps}

其余 1000 多个条目的总时间均小于 0.1 秒。请注意,前两个条目与两个神秘延迟相匹配! (为了完整起见,我还显示了另一个 cPickle 调用,尽管它非常小。)是什么导致 cPickle 使用如此多的时间?

Update 2: 今天又跑了一次,得到的时间如下:

real  1m42.446s
user  0m4.104s
sys   0m11.648s

请注意,这只是编译两个小 .c 文件!然后,我重命名了.sconsign.dblite并再次运行它;当然,它重建了一切,但速度已经快得多:

real  0m34.229s
user  0m28.392s
sys   0m2.932s

好多了!所以现在,我使用需要编译的相同两个文件再次运行它,我得到了:

real  0m3.494s
user  0m2.556s
sys   0m0.460s

现在,那很好!我决定查看 .sconsign.dblite 和旧版本,并发现以下内容:

$ ls -la .scons*
-rw-rw-r-- 1 rsg rsg     189513 Mar 14 20:31 .sconsign.dblite
-rw-rw-r-- 1 rsg rsg 1440507770 Mar 14 20:23 .sconsign.dblite.save

相差7600倍!!!所以现在看来​​这个问题已经解决了,不过很高兴知道 .sconsign.dblite 发生了什么,以及如何防止它再次发生。

环境:

$ scons --version
SCons by Steven Knight et al.:
    script: v2.1.0.r5357[MODIFIED], 2011/09/09 21:31:03, by bdeegan on ubuntu
    engine: v2.1.0.r5357[MODIFIED], 2011/09/09 21:31:03, by bdeegan on ubuntu
    engine path: ['/usr/lib/scons/SCons']
Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 The SCons Foundation
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.5 LTS
Release:        12.04
Codename:       precise
$ python --version
Python 2.7.3

此外,Ubuntu 正在虚拟机中运行,在一台像样的 Windows 7 机器上的 VirtualBox v5.0.16 下。


由于需要花费大量时间进行 unpickle,因此 .sconsign 文件可能已损坏或由于某种原因因数据过多而爆炸,明智的做法是重命名它并查看是否可以解决您的问题。

mv .sconsign.dblite .sconsign.dblist.save

如果是这样,您可以使用以下命令检查旧文件的内容

sconsign .sconsign.dblite.save

这种情况偶尔(实际上很少)发生,我们还无法为开发人员重现它并修复它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要帮助调试缓慢的 scons 运行时 的相关文章

  • 03 SCons 自动构建工具编译hello.c

    安装mingw 我的电脑已经安装过 xff0c 下面主要说下配置环境 我们将mingw的路径和scons的虚拟环境路径添加到临时的环境变量 这样做的好处是使用的时候添加 xff0c 不与其它版本的全局的环境变量冲突 后期我编译ARM程序时把
  • 斯康斯。使用 Glob 进行递归

    我使用 scons 几天了 有点困惑 为什么没有内置工具用于从给定根开始递归构建源 让我解释 我有这样的源码配置 src Core folder1 folder2 subfolder2 1 Std folder1 等等 这棵树可能更深 现在
  • 如何在 scons 中每次构建后运行一些代码?

    我正在寻找一种方法来注册诸如 scons 中的最终构建回调之类的东西 例如 我现在正在做这样的事情 def print build summary failures SCons Script GetBuildFailures notifyE
  • SCons 在 Windows 中启动超慢

    长期以来 我在使用 SCons 进行构建时一直饱受启动时间过长的困扰 在我的旧工作笔记本电脑上 构建最基本的 hello world 示例可能需要长达 60 秒的时间 我刚刚收到一台新笔记本电脑 所以我有机会进一步调查这一点 我们的笔记本电
  • 使用 Python subprocess.call() 启动 ncurses 进程

    我正在尝试致电 ct ng http crosstool ng org 来自 SCons SConstruct 脚本 所以基本上来自 Python 使用以下方法 ret subprocess call mnt build pw build
  • 如何根据编译器类型在 C 编译器的 SConstruct 中设置选项?

    我需要为 C 编译器设置附加选项 例如添加标志以打开所有警告 具体取决于编译器的类型 例如 对于 MSVC 我应该使用 env Append CPPFLAGS Wall 但对于 mingw gcc 我需要使用 env Append CCFL
  • COBOL 的 Scons

    我想在 scons 中创建一个与 COBOL 一起使用的构建器 这是一个开始 import re Import env Source src cpy COPYBK1 cpy src cpy COPYBK2 cpy src cpy COPYB
  • 使用 SCons 进行真正的分层构建?

    所以我读过这里有关分层构建的问题 例如 使用 SCons 创建分层构建 https stackoverflow com questions 3709321 creating a hierarchical build with scons 我
  • SCons:获取原始文件的绝对路径(就好像我没有设置variant_dir一样)

    我可以用File foo bar abspath获取文件的位置 但如果我设置了variant dir 则返回的路径将位于variant dir而不是原始位置 如果我有duplicate 0设置 那么返回的文件实际上并不存在 显然 SCons
  • 为什么 dlopen 函数内传递的 std::any 的 std::any_cast 会引发错误

    我正在摆弄 c 17 和插件 并且遇到了一个无法解决的错误 在下面的 MWE 中 我可以调用一个本地函数 该函数接受std any 当我尝试阅读内容时 一切都按预期进行 当我通过插件 dlopen 加载这个完全相同的函数时 它正确地看到了a
  • SCONS 运行目标

    我一直在寻找 寻找 但找不到我的问题的答案 我今晚刚刚开始学习 scons 看起来棒极了 不过我遇到了一点困惑 为了便于开发 我经常喜欢让我的 make 文件构建我的目标 然后运行它 以便我可以通过一次按键来测试更改 这在 make 文件中
  • SCons配置文件和默认值

    我有一个使用 SCons 构建的项目 以及 MinGW gcc 具体取决于平台 这个项目依赖于其他几个库 我们称它们为libfoo and libbar 可以为不同的用户安装在不同的地方 目前 我的SConstruct文件嵌入了这些库的硬编
  • SCons - 非标准位置的标头/库

    我正在尝试使用 SCons 编译一个程序 该程序需要一组我已安装在非标准位置的依赖项 我已将依赖项安装在 home dja ocr 中 现在我正在尝试编译主程序 但不知道如何告诉 SCons 在哪里查找库和标头 我已经尝试过 除其他外 sc
  • “cl”未被识别为内部或外部命令

    下面是我在 windows7 中运行 scons 编译器时的错误消息 cl is not recognized as an internal or external command operable program or batch fil
  • SCons 不会清除所有文件

    我有一个包含 builds 目录的文件系统 每个目录都包含一个名为 build info xml 的文件 然而 一些构建发生在构建脚本生成 build info xml 之前 因此在这种情况下 我有一个有点不平凡的 SCons SConst
  • SCons 问题 - 不理解 Variables 类

    我正在为一个项目开发 SConstruct 构建文件 并且尝试从选项更新为变量 因为选项已被弃用 我不明白如何使用变量 我有 0 python 经验 这可能是造成这一点的原因 例如 我有这个 opts Variables opts Add
  • 告诉 SCons 不要自动创建目录?

    我正在尝试让 SCons 查看我需要的 git 存储库 并希望使该存储库保持最新 问题是我必须告诉它 git 存储库包含哪些文件才能在构建中使用它们 如果我这样做 SCons 将在尝试克隆存储库之前创建存储库 例如 假设我想克隆 GStre
  • SCons 长命令行 TEMPFILE 与 MinGW

    我正在尝试在 Windows 上使用 SCons 和 MinGW 从 gcc 和 gfortran 对象构建共享库 但在最终链接期间命令行太长 超过 18000 个字符 我知道我需要使用临时文件 响应文件 来传递命令行 但我找不到让 SCo
  • ant+cpptasks 与 scons 与 make

    我正在调查scons http www scons org 我只是想确保在我将大量脑细胞投入到完全不同的事物之前我知道替代方案是什么 我过去一直在使用 GNU make 但从来没有对它感到特别满意 特别是 为什么 Ant 没有更频繁地用于
  • SCons:调用 Makefile 项目的构建

    SCons 提供了 env Command 理论上应该能够调用 配置 and make在 Makefile 项目上 然而 我的理解是 Makefile 项目文件夹首先必须复制到 SCons 的构建目录中 因为构建过程不应更改源树中的任何内容

随机推荐

  • 在 Visual Studio 中查看 var 的类型

    有没有办法查看 a 的类型var在 Visual Studio 2013 代码编辑器中 当我有一个疯狂的时候linq查询 很高兴看到结果类型是什么 我不想更换var关键字与实际类型 我只想看看它是什么 还有一个键盘快捷键会向您显示 将光标放
  • Java GUI repaint() 问题?

    我有一个 JFrame 该 JFrame 包含一个 JButton 我单击 JButton 然后创建了 10 个 JTextField 问题 在通过调整窗口大小 强制重新绘制 之前我看不到它们 只有这样我才能看到创建的 JTextField
  • 安装补丁 19 后,Oracle Forms 6i 在启动时崩溃并显示 0xC0000005 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 UPD 0xC0000005 是STATUS ACCESS VIOLATION 在 winnt h 中定义 这意味着应用程序尝试访问它无法
  • Python super 和设置父类属性

    我在 Python super 以及继承和属性方面遇到了一个非常奇怪的问题 首先 代码 usr bin env python3 import pyglet import pygame class Sprite pyglet sprite S
  • 找到字符串中最长的子串

    我想找到字符串中最长的重复字符序列 ex aabbccc gt ccc aabbbddccdddd gt dddd etc 在第一个示例中 ccc 是最长的序列 因为 c 重复了 3 次 在第二个示例中 dddd 是最长的序列 因为 d 重
  • 如何返回许多 Promise 并在执行其他操作之前等待所有 Promise

    我有一个循环 它调用一个异步执行操作的方法 这个循环可以多次调用该方法 在这个循环之后 我有另一个循环 仅当所有异步工作完成时才需要执行 所以这说明了我想要的 for i 0 i lt 5 i doSomeAsyncStuff for i
  • 使用函数计算 C# 中数组之间的欧几里德距离

    我想计算用户输入的点之间的欧几里德距离 如下所示 static void Main string args int numtest int Parse Console ReadLine int points new int 10 2 for
  • Angular 2 - 打开/关闭默认引导模式

    我不想使用Angular2 引导程序 https github com shlomiassaf angular2 modal or ng2 bs3 模态 https github com dougludlow ng2 bs3 modal正如
  • 获取 Autofac 中接口的所有已注册实现

    我需要从IComponentContext 已注册的列表Type是实现特定接口的 我不需要类型的实际实例 而是想要一个列表Type其中我could获取实例 我想使用此列表在消息总线上生成订阅 如何在 Autofac 中获取接口的所有已注册实
  • 单击按钮获取数据表行数据

    我有一个问题this https plnkr co edit cr4VDR1AZih8WiNxmKg6 p preview项目 我正在尝试创建一个 CRUD 菜单 当点击 编辑 按钮时 该行的数据将被传输到引导模式 并且用户可以从那里进行编
  • 如何访问 PHP 中多选下拉列表中选择的值?

    我在用Jquery 多选小部件 http www erichynds com jquery jquery ui multiselect widget 有一个带有多选选项的下拉列表框 我正在使用 MySql 数据库中的数据填充下拉列表 我无法
  • Google 身份服务 - 如何从经过身份验证的用户获取个人资料/电子邮件信息

    我正在移植一些现有的 js 代码 通过谷歌云平台进行身份验证 因为它们正在迁移到一组新的库 迁移指南 https developers google com identity oauth2 web guides migration to g
  • Cloud SQL 增量到 BigQuery

    我需要针对我正在研究的用例之一提供一些建议 使用案例 我们在 Cloud SQL 中拥有大约 5 10 个表的数据 其中一些被视为查找表 另一些则被视为事务性表 我们需要将其发送到 BigQuery 以生成 3 4 个表 扁平化 嵌套或非规
  • 如何在 JSONP 中处理 twitter 失败鲸鱼

    I load http search twitter com search json callback formatTweets q somehashTag timestamp new Date getTime 我突然得到 Error il
  • FFMPEG 将视频叠加在另一个视频之上

    我已经浏览了 stackoverflow 上的所有问题 但没有一个答案对我有用 我有一个屏幕录制的 mp4 视频和另一个从网络摄像头录制的 mp4 视频 我想将网络摄像头视频覆盖在屏幕录制视频的左上角 我想我终于找到了执行此操作的正确命令行
  • 存储设置:XML 与 SQLite?

    我目前正在编写一个 IRC 客户端 并且一直在尝试找出一种存储服务器设置的好方法 基本上是一个大的网络列表及其服务器 就像大多数 IRC 客户端一样 我决定使用 SQLite 但后来我想以 XML 格式 也许是最终格式 在线免费提供该列表
  • 选择到临时表

    我相信我应该能够做到select into temptable from othertable where temptable以前不存在 但它不起作用 假如说othertable存在并具有有效数据 并且 sometemp不存在 conn l
  • 从列表中删除自定义单词 - Python

    我有一个数据框列 如下所示 我正在考虑删除特殊字符 我希望附加标签 在列表列表中 以便我可以将列附加到现有的 df 这是我收集了这么多 但似乎不起作用 正则表达式尤其给我带来了很大的痛苦 因为它总是返回 预期的字符串或类似字节的对象 df
  • LRPC 的意义何在?为什么有人想要对同一台机器进行远程过程调用?

    根据我对 RPC 远程过程调用 的理解 它们提供了一种向远程计算机发送函数调用 调用等的方法 这样做的明显优点是 您可以拥有一个在机器集群上运行的单个程序 并且可以处理更多请求 更多数据等 但我很困惑LRPC 轻量级RPC http www
  • 需要帮助调试缓慢的 scons 运行时

    我正在使用 scons 构建两个项目 一个项目效果很好 而另一个 更复杂 项目则非常令人沮丧 这是我在为第二个项目运行 scons 时看到的内容 S time scons scons Reading SConscript files lt