SCons教程(11) 调试

  • Post author:
  • Post category:其他




调试

在一个大型构建项目中,编写构建脚本可能会遇到各种问题,此时如果没有一个合适的

debug

方法,是会让开发人员 “发疯” 的,所以在

SCons

中提供了调试方法,可以指出当前正在做的工作,以及是否出现错误和错误类型与内容。



–debug=explain

Command('hello/hello_copy.c', 'hello/hello.c', Copy("$SOURCE", "hello/hello_ccccc.c"))

可以看到在使用

--debug=explain

前后,输出窗口有明显不同,添加上

--debug=explain

选项后,在需要复制的源文件不存在时,会进行说明,方便开发者在执行构建之后,对构建过程进行分析,定位问题。

admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day11
$ scons -Q -c && scons -Q
Copy("hello\hello.c", "hello/hello_ccccc.c")
scons: *** [hello\hello_copy.c] hello/hello_ccccc.c\*.*:

admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day11
$ scons -Q -c && scons -Q --debug=explain
scons: building 'hello\hello_copy.c' because it doesn't exist
Copy("hello\hello.c", "hello/hello_ccccc.c")
scons: *** [hello\hello_copy.c] hello/hello_ccccc.c\*.*:



–warn=target-not-built

可以使用

--warn=target-not-built

在目标未正常编译的情况下,给出警告。



Dump

使用

env.Dump()

可以查看当前环境变量内部的所有配置项结果。

env = Environment()
print(env.Dump())
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day11
$ scons -Q
{ 'AR': 'ar',
  'ARCOM': '$AR $ARFLAGS $TARGET $SOURCES',
  'ARFLAGS': ['rc'],
  'AS': 'as',
  'ASCOM': '$AS $ASFLAGS -o $TARGET $SOURCES',
  'ASFLAGS': [],
  'ASPPCOM': '$CC $ASPPFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES',
  'ASPPFLAGS': '$ASFLAGS',
  'BUILDERS': {'Zip': <SCons.Builder.BuilderBase 
  ......
}

返回的值内容比较丰富,不易于阅读,所以可以通过传入参数,来查看某一个key所对应的值

env = Environment()
print(env.Dump('ENV'))
admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day11
$ scons -Q
{ 'COMSPEC': 'C:\\Windows\\system32\\cmd.exe',
  'PATH': 'C:\\Windows\\System32;c:\\MinGW\\bin',
  'PATHEXT': '.COM;.EXE;.BAT;.CMD',
  'SystemDrive': 'C:',
  'SystemRoot': 'C:\\Windows',
  'TEMP': 'C:\\Users\\admin\\AppData\\Local\\Temp',
  'TMP': 'C:\\Users\\admin\\AppData\\Local\\Temp'}
scons: '.' is up to date.



–tree

可以在命令行,添加

--tree

来查看中间文件和目标文件的依赖关系。

hello_list = Object('hello/hello.c')
hello2_list = Object('hello2/hello2.c')
Program(hello_list + hello2_list)

可以从输出界面看到每个文件都是有依赖的,不管是中间目标文件还是最终的可执行文件。

admin@DESKTOP-NQU1HUV C:\Users\admin\Desktop\scons\day11
$ scons -Q --tree=all
scons: '.' is up to date.
+-.
  +-hello
  | +-hello\hello.c
  | +-hello\hello.exe
  | | +-hello\hello.o
  | | | +-hello\hello.c
  | | | +-C:\MinGW\bin\gcc.EXE
  | | +-hello2\hello2.o
  | | | +-hello2\hello2.c
  | | | +-hello2\inc.h
  | | | +-C:\MinGW\bin\gcc.EXE
  | | +-C:\MinGW\bin\gcc.EXE
  | +-hello\hello.o
  |   +-hello\hello.c
  |   +-C:\MinGW\bin\gcc.EXE
  +-hello2
  | +-hello2\hello2.c
  | +-hello2\hello2.o
  | | +-hello2\hello2.c
  | | +-hello2\inc.h
  | | +-C:\MinGW\bin\gcc.EXE
  | +-hello2\inc.h
  +-SConstruct

可以使用下面的方式,指定对某一个文件查看依赖情况。

scons -Q --tree=all f2.o



status


--status

可以查看当前目录下所有文件的状态。

% scons -Q --tree=status
cc -o f1.o -c -I. f1.c
cc -o f2.o -c -I. f2.c
cc -o f3.o -c -I. f3.c
cc -o prog f1.o f2.o f3.o
E = exists
  R = exists in repository only
    b = implicit builder
      B = explicit builder
        S = side effect
          P = precious
            A = always build
              C = current
                N = no clean
                  H = no cache
[E   b              ]+-.
[E            C     ] +-SConstruct
[E            C     ] +-f1.c
[E     B      C     ] +-f1.o
[E            C     ] | +-f1.c
[E            C     ] | +-inc.h
[E            C     ] +-f2.c
[E     B      C     ] +-f2.o
[E            C     ] | +-f2.c
[E            C     ] | +-inc.h
[E            C     ] +-f3.c
[E     B      C     ] +-f3.o
[E            C     ] | +-f3.c
[E            C     ] | +-inc.h
[E            C     ] +-inc.h
[E     B      C     ] +-prog
[E     B      C     ] +-f1.o
[E            C     ] | +-f1.c
[E            C     ] | +-inc.h
[E     B      C     ] +-f2.o
[E            C     ] | +-f2.c
[E            C     ] | +-inc.h
[E     B      C     ] +-f3.o
[E            C     ] +-f3.c
[E            C     ] +-inc.h

其余可以查看官方帮助文档

官方介绍完结,撒花。。



版权声明:本文为jeek_we原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。