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"