This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: Variable "foo" is not available
- From: "Eli Zaretskii" <eliz at gnu dot org>
- To: Daniel Jacobowitz <drow at false dot org>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Wed, 27 Apr 2005 16:03:47 +0300
- Subject: Re: Variable "foo" is not available
- References: <v9mzsisb72.fsf@marauder.physik.uni-ulm.de> <20050401171947.GA19058@nevyn.them.org> <01c53768$Blat.v2.4$d52008a0@zahav.net.il> <20050402142639.GA27550@nevyn.them.org> <01c54803$Blat.v2.4$d5da9160@zahav.net.il> <20050424221155.GA13653@nevyn.them.org>
- Reply-to: Eli Zaretskii <eliz at gnu dot org>
> Date: Sun, 24 Apr 2005 18:11:55 -0400
> From: Daniel Jacobowitz <drow@false.org>
>
> > > 2005-02-28 Daniel Jacobowitz <dan@codesourcery.com>
> > >
> > > * dwarf2loc.c (loclist_read_variable): Set optimized_out
> > > instead of reporting an error.
> > > * valprint.c (value_check_printable): New function.
> > > (common_val_print): New function. Use value_check_printable.
> > > (value_print): Use value_check_printable.
> > > * value.h (common_val_print): Add prototype.
> >
> > Daniel, I asked this before, but didn't see any replies: what would
> > the current GDB print when an argument from the function call is
> > optimized away? I'd like to mention this in the manual.
>
> Hi Eli,
>
> Terribly sorry about not getting back to you since. I've not had time
> to pull together a testcase to check, but it _should_ look like
> foo (a=<value optimized out>). The message comes from
> value_check_printable in valprint.c.
Thanks. I've committed the attached.
2005-04-27 Eli Zaretskii <eliz@gnu.org>
* gdb.texinfo (Backtrace): Describe backtraces with arguments that
were optimized away.
Index: gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.247
retrieving revision 1.248
diff -u -r1.247 -r1.248
--- gdb.texinfo 22 Apr 2005 13:09:27 -0000 1.247
+++ gdb.texinfo 27 Apr 2005 13:02:13 -0000 1.248
@@ -4170,6 +4170,35 @@
value, indicating that your program has stopped at the beginning of the
code for line @code{993} of @code{builtin.c}.
+@cindex value optimized out, in backtrace
+@cindex function call arguments, optimized out
+If your program was compiled with optimizations, some compilers will
+optimize away arguments passed to functions if those arguments are
+never used after the call. Such optimizations generate code that
+passes arguments through registers, but doesn't store those arguments
+in the stack frame. @value{GDBN} has no way of displaying such
+arguments in stack frames other than the innermost one. Here's what
+such a backtrace might look like:
+
+@smallexample
+@group
+#0 m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
+ at builtin.c:993
+#1 0x6e38 in expand_macro (sym=<value optimized out>) at macro.c:242
+#2 0x6840 in expand_token (obs=0x0, t=<value optimized out>, td=0xf7fffb08)
+ at macro.c:71
+(More stack frames follow...)
+@end group
+@end smallexample
+
+@noindent
+The values of arguments that were not saved in their stack frames are
+shown as @samp{<value optimized out>}.
+
+If you need to display the values of such optimized-out arguments,
+either deduce that from other variables whose values depend on the one
+you are interested in, or recompile without optimizations.
+
@cindex backtrace beyond @code{main} function
@cindex program entry point
@cindex startup code, and backtrace