This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Variable "foo" is not available


> 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]