delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/01/22/17:29:45

From: frazer AT rtp DOT ericsson DOT se
Newsgroups: comp.os.msdos.djgpp
Subject: GDB and static variables
Date: Wed, 22 Jan 1997 16:38:17 GMT
Organization: Ericsson Data Services Americas
Lines: 95
Message-ID: <5c553u$jr6@cnn.exu.ericsson.se>
NNTP-Posting-Host: pc340.rtp.ericsson.se
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

I am having problems with GDB and static variables.  GDB seems
to have problems with debugging information for uninitialized
static variables.  Here is a test program which exhibits the 
strangeness:

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

/* main.c */

int uninitialized_global_variable;
int initialized_global_variable = 1;

static int uninitialized_static_variable;
static int initialized_static_variable = 1;

int main( void )
{
   uninitialized_global_variable = initialized_global_variable;
   uninitialized_static_variable = initialized_static_variable;
   return( 0 );
}

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

Now I compile with DJGPP v2.01 and GCC 2.7.2.1:

C:\TEST>gcc -c -m486 -Wall -g -o main.o main.c

C:\TEST>gcc -g -o test.exe main.o

C:\TEST>

Now into GDB v4.16:

C:\TEST>gdb test.exe
GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for
details.
GDB 4.16 (go32), Copyright 1996 Free Software Foundation, Inc...
(gdb) info variables
All defined variables:

File _globals_:
int initialized_global_variable;
int uninitialized_global_variable;

File main.c:
static int initialized_static_variable;

Non-debugging symbols:
        00006a00  __djgpp_memory_handle_pointer
        00006a00  djgpp_first_dtor
        00006a00  djgpp_last_dtor
        00006a00  djgpp_first_ctor
        00006a00  djgpp_last_ctor
        00006a04  sbrk16_first_byte
        00006a70  sbrk16_api_ofs
        00006a70  sbrk16_last_byte
        00006a74  sbrk16_api_seg
        00006a76  zero

        < etc., etc., etc. >
        
        00007208  _what_we_return_to_app_as_old_size
        0000720c  _what_size_dpmi_thinks_we_are
        00007210  uninitialized_static_variable
        00007214  _emu_entry
        00007218  exception_stack

        < etc., etc., etc. >
        
(gdb)

Why is the uninitialized static variable a "Non-debugging symbol"?
I tried compiling with "-ggdb" ( unsupported ) and "-g3" ( no
change in behavior ).  I also tried debugging the COFF output, but
it was the same.

Now if it was just simple "int"s or "double"s or whatever I could
just muddle through by using GDB's "print /FMT", but in my real
program I have static struct's and without the debugging information
I can't get to the data members.

To further add to the weirdness, when I first enter a module with the
static struct's, GDB understands the struct and I can get to the data
members.  But after I leave the module and come back in later in the
program, GDB has forgotten the format of the struct.  When I try to
get to one of the data members GDB says "Attempt to extract a
component of a value that is not a structure."

Help!
Scott Frazer


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019