[linux] Help please:gdb:Ako debugovat chyby vzniknute pocas navratu z funkcie [resp vo vunkcii ???()]?

peter Fodrek fodrek na kasr.elf.stuba.sk
Pátek Listopad 29 16:16:07 CET 2002


Vazeny kolegovia!

Potreboval by poradit ako zistit, kde je chyba v kode.. Prejavuje sa tak, ze
volam funkciu, tato prebehne az na koniec no nenastane navrat do volajuce
funkcie...
pricom po gdb pokus core dostavam vystup...


GNU gdb 4.17
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or 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.
This GDB was configured as "i386-redhat-linux"...
(no debugging symbols found)...
Core was generated by `pokus'.
Program terminated with signal 11, Segmentation fault.
#0  0x5c616c73 in ?? ()
(gdb) bt
#0  0x5c616c73 in ?? ()
Cannot access memory at address 0x2a0061.
(gdb) quit


CODE 1: Je volajuci kod a sposob zistenia, ze som sa nevratil do
CODE 2:  Je volany kod
VYPIS je subor demostrujuci, ze posledny vypis z CODE 2: prebehol, ale
program sa nevratil do nadradeneho kodu...(koniec vypisu), V  subore vidno,
ze           v programe je okrem vykonavameho kodu aj  obsluha SIG_USR1
(funkcia Prisli Data) a Event handler udalosti Expose instancie triedy
coreWidgetClass, ktoru vyuzivam ako kresliacu plochu (kreslim pomocou X-lib)
X-WINDOWS aplikacie, (funkcia vykresliGokno...).

S gdb nemam velke skusenosti.. Nevie mi niekto poradit ako debugovat tento
kod...
Napada ma jedine chyba pri swap-ovani jadra 2.0.35 (koli HW musim pouzivat
2.0.3x), ale neviem ako zabranit swap-ovaniu kodu...


Vrela vdaka za kazdu radu..


S pozdravom

Peto



CODE 1:

....
  fp=fopen("prepinam OK","at");
  fprintf(fp,"11a.1\n\n");
  fclose(fp);
  zobraz_plan("./002.rez");
 fp=fopen("prepinam OK","at");
 fprintf(fp,"11b.1\n\n");
 fclose(fp);
....

CODE 2:

void zobraz_plan(char *meno_planu)
{
    long flag=0;
    char prikaz[12];
    double oldX,oldY,X,Y,R,otocUhol,startUhol,koniecUhol;
    // Zisti velkost
    FILE *planik,*fp;
    int i;
    idemPrekladam=1;
    idemWW=1;
    ......
    idemWW=0;
    sleep(1);
    vykresliGokno(GRAFICKE_OKNO,NULL,NULL,0);
  fp=fopen("prepinam OK","at");
       fprintf(fp,"\n\n\n\nTretie zobrazenie!!!!!!!!\n");
  fclose(fp);
    idemPrekladam=0;


  fp=fopen("prepinam OK","at");

       fprintf(fp,"\n\n\n\nUplny vystup z prekladu !!!!\n");
  fclose(fp);


}


VYPIS:


  Prisli DATA !!!!
-12.1  0

11.1

11a.1





Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=1




Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=1




Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=1




Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=1




Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=1




Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=1




Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=1




Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=1




Preklad skonceny!!!!!!!!
  Prisli DATA !!!!




Vypis skonceny!!!!!!!!




Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=1




Prve zobrazenie!!!!!!!!
  Prisli DATA !!!!




Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=1




Drhue zobrazenie!!!!!!!!
  Prisli DATA !!!!




Uplny vstup do VykresliGokno !!!!




SOM TU !!!!




 Graficke okno korektne a INICIALIZOVANA GRAFIKA!!!!



 idemWW=0!!!!




 uzsom=0!!!!




Zacinam vykreslovat !!!!



Skoncil som vykreslovat !!!!



Tretie zobrazenie!!!!!!!!




Uplny vystup z prekladu !!!!







Další informace o konferenci linux