文件标识符无效。使用 fopen 生成有效的文件标识符。_ILE C/C++编译器listing文件介绍...

什么是listing文件

在使用ILE C/C++编译器的时候可以通过特定的编译选项使编译器生成listing文件。Listing文件包含了编译过程的相关信息。作为调试的辅助,这些信息可以用来协助探查编译过程中发生了哪些问题。比如,可以通过listing文件来查看具体的编译选项, 查看宏展开以及include文件的相关信息,等等。如果编译过程出现了错误或者编译生成的程序运行出错,在排查错误原因的过程中,或许可以从listing文件中找到一些有用的信息。

listing文件的内容

listing文件包含以下几部分:

  • 基本信息

在listing文件的最开头,包含着该一些基本编译信息,比如编译器的版本,被编译源文件名称,运行系统的名称以及编译的时间戳。如下图所示:

6bd62f8e1f991ce74195e5a07fecd68f.png

执行shift+F8可以看到系统名称以及时间戳

  • PROLOG信息

PROLOG部分包含编译命令执行时具体的参数信息,对应了在编写编译命令时通过F4查看到的具体的编译选项。比如生成的MODULE名称,LIBRARY名称,源文件路径,以及其他的编译选项。如下例:

3b6e64dc4cc11bc5e4dc83ea1cf8cd94.png

通过page down查看直至最后

291fe3ba7f54b641cb89962abd32eea8.png

  • 源码部分

源码部分展示了用户源代码以及所有系统或者用户的Include文件的代码内容。有三列显示信息,第一列FILENO显示文件编号,该文件编号在后面引用部分中有具体的对应,第二列LINE显示代码在文件中的具体行号,第三列STMT是语句(statement)号,对函数内部的语句进行编号,当运行时出错或者调试时使用。

具体代码部分如下例,最右侧为文件中具体的源代码:

31bdb617817af6b4188f3d04cf057ac7.png

源代码中如果使用到了宏定义,当指定编译选项OPTION(*EXPMAC)时,在宏使用的位置会输出宏展开后的代码。如下图所示:

d04668cd959e42c8bf53ea33d8d125a0.png

成功的编译会生成对应的statement编号,编译出错就没有该信息了:

db9966f0ec04e1cf1b7af67210eaaa67.png

编译过程中产生的诊断信息,也会在对应的源码行下面显示出来,如下图所示:

0cfd4b1a9f5c5e54a0564979d80ee3c0.png

  • 引用部分

此部分列出了源文件中定义的标识符及其信息,比如类型,作用域,以及出现在哪个文件中的第几行第几列,出现时是定义,声明还是引用等等。如下图:

082dc080ab7665bb149b4ac3db678bc2.png

以foo举例,extern void()是它声明的返回类型以及参数列表,0-7.6Y指的是foo出现在编号为0的文件中(具体编号对应文件查看文件列表部分)的第7行第6列,出现方式Y为函数定义(Y的释义在此部分会有详细说明)。

  • 文件列表部分

文件列表部分列出了编译过程中涉及到的所有源文件和头文件,头文件包括用户自定义的头文件以及系统头文件。这些文件被统一编号,该编号可以用于listing文件其他部分的信息说明。如下例:

e55290b2ca38563d255ad3bfe53ed6be.png

  • 结尾部分

该部分主要汇总编译过程中输出的诊断信息以及编译结果,如下图所示:

00baec7f32557dcd965aaf500fe68978.png

如何使用ILE C/C++编译器生成listing文件

ILE C/C++ 编译器通过 OUTPUT OPTIONS控制listing文件输出,当我们需要生成listing file的时候就需要用到此选项。如下图所示:

2e20f074db58f34db638d2f543b1455e.png

通常我们会给“Output file name”填入合适的内容来指定listing file的输出方式:

  1. 指定输出到用户自定义的流文件

在 Output file name中填入用户定义的流文件路径,编译器将会输出listing信息到该文件中,如下:

999029ef9fd817fae963bfa70619ef63.png

在编译命令中的格式为:

d86198c9dcaae72a41e31fcbca830a59.png

然后就可以通过wrklnk命令查看文件的内容。

  1. 输出到spooled file

在Output file name中输入*PRINT/*print,编译器会将listing file的内容输入到spooled file,这时候需要通过查看spooled file来查看具体的listing信息。如下:

fae72d388ea5ebfd9a28d66df2dea75b.png

在编译命令中的格式为:

2fc83ea78ba2f546c78aa4ac05009ae2.png

然后就可以通过WRKSPLF命令查看具体的spooled file。

OUTPUT选项的参数还有Title和Subtitle,具体的详细介绍请查阅“ILE C/C++ Compiler Reference”.

listing文件输出相关的编译选项

前面介绍到listing file的内容包含几个部分,里面有很多不同的信息展示,这些信息是否要全部显示在listing文件中可以通过编译选项Compiler options来进行控制,即:

a015295baf22a6c0f94cf44c3d5a1b5b.png

又即

4f8c27690f195c4a73c37e8c53292fcb.png

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.

作者:王颖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值