Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C/GTK+ debuggaus

Jaska [10.10.2009 16:28:16]

#

Haluaisin paikallistaa eräästä GTK+-ohjelmasta muistivuodon. Latasin koodin ja käänsin sen debug-symbolien avulla. Nyt voin ajaa ohjelmaa Nemmiverillä ja näen, mitä koodi tekee. Kuitenkaan en näe mitä tapahtuu, kun ohjelma kutsuu GTK+:n funktioita. Saako Nemiverillä tarkasteltua toisen paketin koodia? Lisäksi haluaisin tietää, miten muistivuotokohtaa kannattaa etsiä. Voinko esimerkiksi pyytää valgrindiä tutkimaan, vuotaako muistia ennen kuin pääohjelmassa edetään riville 650?

os [10.10.2009 23:01:50]

#

Kai olet käyttänyt Valgrindiä --leak-check=full -option kanssa?

Jaska [11.10.2009 10:37:12]

#

Jeps. Käytin sitä alkuperäiseen ohjelmaan, mutta sitä pitää ilmeisesti käyttää käännettyyn pakettiin vai kuinka? Toisaalta enpä tiedä auttaako se paikallistamaan vuotoa, kun se ei anna mitään vinkkiä siitä, missä kohtaa vuoto tapahtuu.

os [11.10.2009 12:30:23]

#

No kai se nyt aika hyviä vinkkejä antaa, jos sinulla on debug-symbolit mukana...

#include <stdlib.h>

int main()
{
        char * buf = malloc(100);
        return 0;
}
gcc -g leak.c -o leak

[t]valgrind --leak-check=full ./leak[/t] kirjoitti:

...
==16398== 100 bytes in 1 blocks are definitely lost in loss record 1 of 1
==16398== at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==16398== by 0x80483E0: main (leak.c:5)
...

Jaska [11.10.2009 12:49:17]

#

Äh. No niinpäs näyttääkin. Mulla vaan näkyy Nemiverissä Geditin main.c ja eräs muistivuoto viittaa tiedostoon vg_replace_malloc.c. Mitenkähän saisin Nemiverin tarkastamaan tuota tiedostoa? Nemiverin käynnistin komennolla nemiver gedit ja tuo vg_replace_malloc.c ei näytä olevan edes samassa hakemistossa gediti.c:n kanssa.

os [11.10.2009 12:58:13]

#

http://valgrind.org/docs/manual/quick-start.html:

The stack trace tells you where the leaked memory was allocated. Memcheck cannot tell you why the memory leaked, unfortunately. (Ignore the "vg_replace_malloc.c", that's an implementation detail.)

Kannattaa katsoa siitä seuraavalta riviltä. (vrt. edellinen viestini)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta