http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55541



             Bug #: 55541

           Summary: unable to see local variables due extra lexical block

                    was generated

    Classification: Unclassified

           Product: gcc

           Version: 4.6.2

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c++

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: chihin...@oracle.com





There is a regression present gcc4.4.4: the compiler 

generates a bogus lexical block marker in the debug info, more precisely 

between the parameters and the local variables of functions.  This is related 

to http://gcc.gnu.org/ml/gcc-patches/2010-08/msg02111.html



This affect gdb/dbx behavior, that debugger users are not able to inspect local

variable value when stop at "}" line of a function, for detail, please refer to

gdb bugzilla



http://sourceware.org/bugzilla/show_bug.cgi?id=14850



for following test cast



int

main() {

    int i;

    i = 10;

}



if I stop at  } of main and print i, gdb gave error:

tarting program: /home/chko/core/g++/g45/a.out



Breakpoint 1, main () at t.cc:4

4           i = 10;

(gdb) p i

$1 = 0

(gdb) n

5       }

(gdb) p i

No symbol "i" in current context.

(gdb)



This is due to "i" was within DW_TAG_lexical_block:



< 1><0x00000025>    DW_TAG_subprogram

                      DW_AT_external              yes(1)

                      DW_AT_name                  "main"

                      DW_AT_decl_file             0x00000001 /tmp/t.cc

                      DW_AT_decl_line             0x00000003

                      DW_AT_type                  <0x00000059>

                      DW_AT_low_pc                0x08050990

                      DW_AT_high_pc               0x080509a4

                      DW_AT_frame_base            <loclist with 4 entries

follows>

                        [ 0]<lowpc=0x00000000><highpc=0x00000001>DW_OP_breg4+4

                        [ 1]<lowpc=0x00000001><highpc=0x00000003>DW_OP_breg4+8

                        [ 2]<lowpc=0x00000003><highpc=0x00000013>DW_OP_breg5+8

                        [ 3]<lowpc=0x00000013><highpc=0x00000014>DW_OP_breg4+4

                      DW_AT_GNU_all_call_sites    yes(1)

                      DW_AT_sibling               <0x00000059>

< 2><0x00000042>      DW_TAG_lexical_block

                        DW_AT_low_pc                0x08050996

                        DW_AT_high_pc               0x0805099d

< 3><0x0000004b>        DW_TAG_variable

                          DW_AT_name                  "i"

                          DW_AT_decl_file             0x00000001 /tmp/t.cc

                          DW_AT_decl_line             0x00000004

                          DW_AT_type                  <0x00000059>

                          DW_AT_location              DW_OP_fbreg -12

< 1><0x00000059>    DW_TAG_base_type

                      DW_AT_byte_size             0x00000004

                      DW_AT_encoding              DW_ATE_signed

                      DW_AT_name                  "int"

Reply via email to