Ladění problému ve stacku

Ladislav Vaiz spam na nagano.cz
Čtvrtek Září 16 13:14:44 CEST 2010


Ahoj,
mám program v C, kde je někde skrytá chyba, asi nějaké přetečení:

void funkce(){
    struct dirent **namelist = NULL;
    int n, i;
    char *neco;
    ...

    ...
    n = scandir(...);
    spousta_kodu();
    a_volani_funkci();

    for (i=0;i<n;i++) free(namelist[i]);
}

Volání free(namelist[32]) vyvolá segmentation fault, protože n bylo 
spoustou volání přepsáno na nesmysl (31671296, ale mění se to).

Jak odladit, kde to "ustřelilo" do n?

Gdb příkaz watch nefunguje, zakřičí, že proměnná n pozbyla platnosti. 
Patrně jde o softwarový watchpoint. Hardwarový mi nefunguje ani pod 
rootem. Zkoušel jsem přidat globální pointer na n a do podezřelých funkcí 
dát výpis. Pak se ale chyba neprojeví, asi to ustřelí jinam. Je to Debian 
Lenny, AMD64.

Netušíte, co s tím?


Díky Láďa


Další informace o konferenci Linux