什么是listing文件
在使用ILE C/C++编译器的时候可以通过特定的编译选项使编译器生成listing文件。Listing文件包含了编译过程的相关信息。作为调试的辅助,这些信息可以用来协助探查编译过程中发生了哪些问题。比如,可以通过listing文件来查看具体的编译选项, 查看宏展开以及include文件的相关信息,等等。如果编译过程出现了错误或者编译生成的程序运行出错,在排查错误原因的过程中,或许可以从listing文件中找到一些有用的信息。
listing文件的内容
listing文件包含以下几部分:
基本信息
在listing文件的最开头,包含着该一些基本编译信息,比如编译器的版本,被编译源文件名称,运行系统的名称以及编译的时间戳。如下图所示:
执行shift+F8可以看到系统名称以及时间戳
PROLOG信息
PROLOG部分包含编译命令执行时具体的参数信息,对应了在编写编译命令时通过F4查看到的具体的编译选项。比如生成的MODULE名称,LIBRARY名称,源文件路径,以及其他的编译选项。如下例:
通过page down查看直至最后
源码部分
源码部分展示了用户源代码以及所有系统或者用户的Include文件的代码内容。有三列显示信息,第一列FILENO显示文件编号,该文件编号在后面引用部分中有具体的对应,第二列LINE显示代码在文件中的具体行号,第三列STMT是语句(statement)号,对函数内部的语句进行编号,当运行时出错或者调试时使用。
具体代码部分如下例,最右侧为文件中具体的源代码:
源代码中如果使用到了宏定义,当指定编译选项OPTION(*EXPMAC)时,在宏使用的位置会输出宏展开后的代码。如下图所示:
成功的编译会生成对应的statement编号,编译出错就没有该信息了:
编译过程中产生的诊断信息,也会在对应的源码行下面显示出来,如下图所示:
引用部分
此部分列出了源文件中定义的标识符及其信息,比如类型,作用域,以及出现在哪个文件中的第几行第几列,出现时是定义,声明还是引用等等。如下图:
以foo举例,extern void()是它声明的返回类型以及参数列表,0-7.6Y指的是foo出现在编号为0的文件中(具体编号对应文件查看文件列表部分)的第7行第6列,出现方式Y为函数定义(Y的释义在此部分会有详细说明)。
文件列表部分
文件列表部分列出了编译过程中涉及到的所有源文件和头文件,头文件包括用户自定义的头文件以及系统头文件。这些文件被统一编号,该编号可以用于listing文件其他部分的信息说明。如下例:
结尾部分
该部分主要汇总编译过程中输出的诊断信息以及编译结果,如下图所示:
如何使用ILE C/C++编译器生成listing文件
ILE C/C++ 编译器通过 OUTPUT OPTIONS控制listing文件输出,当我们需要生成listing file的时候就需要用到此选项。如下图所示:
通常我们会给“Output file name”填入合适的内容来指定listing file的输出方式:
指定输出到用户自定义的流文件
在 Output file name中填入用户定义的流文件路径,编译器将会输出listing信息到该文件中,如下:
在编译命令中的格式为:
然后就可以通过wrklnk命令查看文件的内容。
输出到spooled file
在Output file name中输入*PRINT/*print,编译器会将listing file的内容输入到spooled file,这时候需要通过查看spooled file来查看具体的listing信息。如下:
在编译命令中的格式为:
然后就可以通过WRKSPLF命令查看具体的spooled file。
OUTPUT选项的参数还有Title和Subtitle,具体的详细介绍请查阅“ILE C/C++ Compiler Reference”.
与listing文件输出相关的编译选项
前面介绍到listing file的内容包含几个部分,里面有很多不同的信息展示,这些信息是否要全部显示在listing文件中可以通过编译选项Compiler options来进行控制,即:
又即
Compiler options有很多可选参数,其中跟listing file内容相关的如下:
*FULL/*NOFULL
打开/关闭所有的listing选项,相当于后面几个选项参数的全集。
*SHOWSRC/*NOSHOWSRC
在listing文件中是否显示上面描述的“源码部分“。
*SHOWINC/*NOSHOWINC
在listing文件中的源码部分是否展开被包含的用户自定义以及系统头文件的内容。
-
*SHOWSYS/*NOSHOWSYS
是否展开被包含的系统头文件的内容。
-
*SHOWUSR/*NOSHOWUSR
是否展开被包含的用户自定义头文件的内容。
*EXPMAC/*NOEXPMAC
在listing文件中的源码部分是否展开宏。
*XREF/*NOXREF
在listing文件中是否生成前面描述到的“引用部分”。
*XREFREF/*NOXREFREF
这个参数跟上面的*XREF相关,指定“引用部分”是不是只包含一些“被引用”的标识符,如果一些标识符只是声明或者定义,用*XREFREF就不会显示在listing文件的引用部分了。
实例介绍
上面的截图中用到的是如下的代码:
/tmp/example.h
#include
#define MAX 100
#define MIN 10
bool verify(int var){
return ((var > MAX ? false : var) > MIN) ? true : false;
}
/tmp/example.C
#include "example.h"
bool result;
#warning "This is a warning example."
void foo(){
int t = 30;
result = verify(t);
}
执行的命令:
CRTCPPMOD MODULE(QTEMP/EXAMPLE) SRCSTMF('/tmp/example.C') OUTPUT('/tmp/example.lst') OPTION(*FULL)
WRKLNK OBJ('/tmp/example.lst')
附具体listing文件内容:
5770WDS V7R3M0 160422 IBM ILE C++ compiler example.C XXXXXXX 12/04/18 07:21:43
* * * * * P R O L O G * * * * *
Module . . . . . . . . . . . . : EXAMPLE
Library . . . . . . . . . . . : QTEMP
Source stream file . . . . . . : /tmp/example.C
Text description . . . . . . . :
Output options:
Output file . . . . . . . . . : /tmp/example.lst
Title . . . . . . . . . . . . : *BLANK
Subtitle . . . . . . . . . . : *BLANK
Compiler options . . . . . . . : *FULL *SHOWSRC *SHOWSYS *SHOWUSR *SHOWINC *EXPMAC
*LONGLONG *NOBITSIGN *NORTTI *XREF *XREFREF
*NOEVENTF *LOGMSG *NOSTDLOGMSG *NOSYSINCPATH *STDINC *NOINCDIRFIRST *GEN
Checkout options . . . . . . . : *NOCOND *NOEFFECT *NOGENERAL *NOPARM *NOPORT *NOREACH *NOTRUNC *NOUNUSED
*NOGOTO *NOPPTRACE *NOLANG *NOCLASS *NOTEMP
Optimization . . . . . . . . . : 10
Inline options:
Inliner . . . . . . . . . . . : *OFF
Mode . . . . . . . . . . . . : *AUTO
Threshold . . . . . . . . . . : 250
Limit . . . . . . . . . . . . : 2000
Report . . . . . . . . . . . : *NO
Module creation options . . . . : *NOKEEPILDTA
Debugging view . . . . . . . . : *NONE
Debug encryption key . . . . . : *NONE
Define names . . . . . . . . . : *NONE
Language level . . . . . . . . : *EXTENDED
Alias . . . . . . . . . . . . . : *ANSI
System interface options . . . : *IFS64IO
Locale object type . . . . . . : *LOCALE
Message flagging level . . . . : 0
Compiler messages:
Message limit . . . . . . . . : *NOMAX
Message limit severity . . . : 30
Replace module object . . . . . : *YES
Authority . . . . . . . . . . . : *LIBCRTAUT
Target release . . . . . . . . : *CURRENT
Performance collection . . . . : *PEP
Performance options . . . . . . : *SETFPCA *NOSTRDONLY
Profiling data . . . . . . . . : *NOCOL
Teraspace options . . . . . . . : *NO
Storage model . . . . . . . . . : *SNGLVL
Data model . . . . . . . . . . : *P128
Run time binding . . . . . . . : *DEFAULT
Preprocessor generation options : *NONE
Include directory . . . . . . . : *NONE
Pack structure . . . . . . . . : *NATURAL
Enum size . . . . . . . . . . . : *SMALL
Dependency information . . . . : *NONE
Default char type . . . . . . . : *UNSIGNED
Template options . . . . . . . :
Temporary include directory . : *NONE
Maximum generated headers . . : 1
Template validity checking . : *NO
Template Registry . . . . . . . : *NONE
Weak Template Definitions . . . : *YES
Compiler services option . . . : *BLANK
Licensed internal code options : *BLANK
Target CCSID . . . . . . . . . : *SOURCE
Decimal float round mode . . . : *HALFEVEN
Last change . . . . . . . . . . : 12/04/18 07:21:30
Source description . . . . . . :
Compiler . . . . . . . . . . . : IBM ILE C++ compiler
* * * * * E N D O F P R O L O G * * * * *
***** SOURCE SECTION *****
FILENO LINE STMT
0 1 | #include "example.h"
1 1 | #include
2 1 | /* begin_generated_IBM_copyright_prolog */
2 2 | /* This is an automatically generated copyright prolog. */
2 3 | /* After initializing, DO NOT MODIFY OR MOVE */
2 4 | /* ----------------------------------------------------------------- */
2 5 | /* */
2 6 | /* Product(s): */
2 7 | /* 5770-SS1 */
2 8 | /* */
2 9 | /* (C)Copyright IBM Corp. 2010, 2013 */
2 10 | /* */
2 11 | /* All rights reserved. */
2 12 | /* US Government Users Restricted Rights - */
2 13 | /* Use, duplication or disclosure restricted */
2 14 | /* by GSA ADP Schedule Contract with IBM Corp. */
2 15 | /* */
2 16 | /* Licensed Materials-Property of IBM */
2 17 | /* */
2 18 | /* --------------------------------------------------------------- */
2 19 | /* */
2 20 | /* end_generated_IBM_copyright_prolog */
2 21 | #ifndef __stdbool_h
2 22 | #define __stdbool_h
2 23 |
2 24 | #ifdef __cplusplus
2 25 | extern "C" {
2 26 | #pragma info(none)
2 27 | #else
2 28 | #pragma nomargins nosequence
2 29 | #pragma checkout(suspend)
2 30 | #endif
2 31 |
2 32 | /* ================================================================= */
2 33 | /* Header File Name: stdbool.h */
2 34 | /* */
2 35 | /* This header contains the declarations for true, false, bool. */
2 36 | /* ================================================================= */
2 37 |
2 38 | #ifndef __cplusplus
2 39 | #ifndef _BOOL
2 40 | #define _BOOL
2 41 | #define bool _Bool
2 42 | #endif
2 43 | #ifndef _TRUE
2 44 | #define _TRUE
2 45 | #define true 1
2 46 | #endif
2 47 | #ifndef _FALSE
2 48 | #define _FALSE
2 49 | #define false 0
2 50 | #endif
2 51 | #endif
2 52 |
2 53 | #define __bool_true_false_are_defined 1
2 54 |
2 55 | #ifdef __cplusplus
2 56 | #pragma info(restore)
2 57 | }
2 58 | #else
2 59 | #pragma checkout(resume)
2 60 | #endif
2 61 |
2 62 | #endif /* #ifndef __stdbool_h */
1 2 | #define MAX 100
1 3 | #define MIN 10
1 4 |
1 5 | bool verify(int var){
1 6 1 | return ((var > MAX ? false : var) > MIN) ? true : false;
1 6 1 + return ((var > 100 ? false : var) > 10) ? true : false;
1 7 | }
0 2 |
0 3 | bool result;
0 4 |
0 5 | #warning "This is a warning example."
=========================^
"/tmp/example.C", line 5.2: CZP0879 (10) #warning directive: "This is a warning example.".
0 6 |
0 7 | void foo(){
0 8 1 | int t = 30;
0 9 2 | result = verify(t);
0 10 | }
***** ATTRIBUTE AND CROSS REFERENCE SECTION *****
$: identifier declared. #: identifier assigned. &: identifier declared
X: function declared. Y: function defined. Z: function invoked.
foo extern void ()
0-7.6Y
t auto int in function foo
0-8.9& 0-9.21
result extern bool
0-3.6$ 0-9.5#
verify extern bool (int)
0-9.14Z 1-5.6Y
var int in function verify
1-5.17$ 1-6.14 1-6.34
***** FILE TABLE SECTION *****
0 = /tmp/example.C
1 = /tmp/example.h
2 = /QIBM/include/stdbool.h
***** COMPILATION EPILOGUE SECTION *****
TOTAL INFORMATIONAL WARNING ERROR SEVERE UNRECOVERABLE
(00) (10) (20) (30) (40)
1 0 1 0 0 0
Compilation succeeded for file /tmp/example.C.
Module EXAMPLE was created in library QTEMP on 12/04/18 at 07:21:43.
作者:王颖