gdb
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Why "call cos(.2)" returns garbage?


From: Vamsi Krishna
Subject: Re: Why "call cos(.2)" returns garbage?
Date: Thu, 24 Dec 2009 19:04:42 -0500

Hello,

Looks like 'gdb' is missing debug information about the function 'cos' , and the debugger implicitly assumes all the functions return an 'int' , if the function is not compiled in debug mode.

I derive my explanation from the following test case.

1. Create a function 'double test_cos(double)' and compile it in optimized mode with -O3 using gcc
 "$gcc -c -O3 test1.c"

2. Complie the file containing the 'main' function in debug mode
"$gcc -g test.c test1.o -lm"

============[gdb a.out]====================

(gdb) list 0
1       #include <math.h>
2       #include "test1.h"
3       double    (*fcn)(double);
4       main()
5       {
6                double t;
7                 fcn = cos;
8                  t=cos(.2);
9                   t=cos(-.2);
10                      test_cos(.2);
(gdb) call fcn(0.2)
$4 = 0.98006657784124163
(gdb) call cos(0.2)
$5 = -1073792992
(gdb) call test_cos(0.2)
$6 = -1073792992
=====================================

============[test1.h]=================
#ifndef _test_1_h
#define _test_1_h
double test_cos(double);
#endif
====================================

============[test1.c]==================
#include<math.h>
#include "test1.h"
double test_cos(double a){
        return cos(a);
}
====================================

============[test.c]==================
#include <math.h>
#include "test1.h"
double    (*fcn)(double);
main()
{
         double t;
          fcn = cos;
           t=cos(.2);
            t=cos(-.2);
                test_cos(.2);
}
===================================

May be the developers of gdb can you more details.

also
=======================================
(gdb) call cos
$6 = {<text variable, no debug info>} 0xc325d0 <cos>
=======================================


Thank you,
Vamsi Kundeti



On Wed, Dec 23, 2009 at 8:17 PM, pilgrim2 <address@hidden> wrote:

Hi,

 I was wondering how come the call to "call cos(.2)" returns the wrong
answer in:

#include <math.h>
double    (*fcn)(double);
main()
{
 double t;
 fcn = cos;
 t=cos(.2);
 t=cos(-.2);
}

(gdb) call cos(.2)
$16 = 104
(gdb) call fcn(.2)
$17 = 0.98006657784124163

Thanks,

Linh
--
View this message in context: http://old.nabble.com/Why-%22call-cos%28.2%29%22-returns-garbage--tp26909516p26909516.html
Sent from the Gnu - gdb - General mailing list archive at Nabble.com.






--
Sincerely,
Vamsi

reply via email to

[Prev in Thread] Current Thread [Next in Thread]