Two debug entries for one local variables, is it a bug in GCC or GDB

asmwarrior asmwarrior@gmail.com
Fri Jul 9 02:35:00 GMT 2010


  I have post this message to both GCC and GDB, because I'm not sure it 
is a bug in GDB or GCC.
Hi, I have just find two dwarf debug entries for one local variables.

For example, the sample code is just like:

-----------------------------------------

wxString ParserThread::ReadAncestorList()
{

     wxString ccc;
     wxString templateArgument;
     wxString aaa;
     aaa = m_Tokenizer.GetToken(); // eat ":"
     templateArgument = aaa;
     while (!TestDestroy())
     {

         //Peek the next token
         wxString next = m_Tokenizer.PeekToken();

         if (next.IsEmpty()
             || next==ParserConsts::opbrace
             || next==ParserConsts::semicolon ) // here, we are at the end of ancestor list
         {
             break;
         }
         else if (next==ParserConsts::lt)       // class AAA : BBB<  int, float>
         {
             wxString arg = SkipAngleBraces();
             if(!arg.IsEmpty())                 // find a matching<>
             {
                 templateArgument<<arg;
             }
             else
             {
                 TRACE(_T("Not Matching<>  find. Error!!!") );
             }
         }
...
-------------------------------------------

But I found that GDG can show the wxString aaa correctly, but wxString templateArgument incorrectly.

I have just check the debug information in the object file.
and found that there are two entries for local variable "argumentTemplate", but only one entry for "aaa".

--------------------------------------------
<2><40a9f>: Abbrev Number: 182 (DW_TAG_variable)
     <40aa1>    DW_AT_name        : (indirect string, offset: 0x1095): templateArgument	
     <40aa5>    DW_AT_decl_file   : 19	
     <40aa6>    DW_AT_decl_line   : 2593	
     <40aa8>    DW_AT_type        :<0xd168>	
     <40aac>    DW_AT_accessibility: 3	(private)
     <40aad>    DW_AT_location    : 2 byte block: 53 6 	(DW_OP_reg3; DW_OP_deref)
  <2><40ab0>: Abbrev Number: 164 (DW_TAG_lexical_block)
     <40ab2>    DW_AT_ranges      : 0x168	
  <3><40ab6>: Abbrev Number: 165 (DW_TAG_variable)
     <40ab8>    DW_AT_name        : ccc	
     <40abc>    DW_AT_decl_file   : 19	
     <40abd>    DW_AT_decl_line   : 2592	
     <40abf>    DW_AT_type        :<0xd168>	
     <40ac3>    DW_AT_location    : 2 byte block: 91 50 	(DW_OP_fbreg: -48)
  <3><40ac6>: Abbrev Number: 179 (DW_TAG_variable)
     <40ac8>    DW_AT_name        : (indirect string, offset: 0x1095): templateArgument	
     <40acc>    DW_AT_decl_file   : 19	
     <40acd>    DW_AT_decl_line   : 2593	
     <40acf>    DW_AT_type        :<0xd168>	
     <40ad3>    DW_AT_location    : 2 byte block: 91 4c 	(DW_OP_fbreg: -52)
  <3><40ad6>: Abbrev Number: 165 (DW_TAG_variable)
     <40ad8>    DW_AT_name        : aaa	
     <40adc>    DW_AT_decl_file   : 19	
     <40add>    DW_AT_decl_line   : 2594	
     <40adf>    DW_AT_type        :<0xd168>	
     <40ae3>    DW_AT_location    : 2 byte block: 91 48 	(DW_OP_fbreg: -56)
  <3><40ae6>: Abbrev Number: 170 (DW_TAG_lexical_block)

------------------------------------------------------------------------------
Also, you can see the screen shot in my Codeblocks forums' post:

http://forums.codeblocks.org/index.php/topic,12873.msg86906.html#msg86906


So, my question is:

Is this a bug in GCC or GDB? ( I have just test the MinGW GCC 4.5 and MinGW 4.4.4, they get the same result)


Thanks

Asmwarrior (ollydbg from codeblocks' forum)




More information about the Gdb mailing list