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