Ladění problému ve stacku

Tomáš Janoušek pytt_l na nomi.cz
Čtvrtek Září 16 22:27:20 CEST 2010


Zdravím,

On Thu, Sep 16, 2010 at 04:03:45PM +0200, Ladislav Vaiz wrote:
> Padá to jen při kompilaci -O2, s -O0 je to v pořádku. A při -O2 se půlením 
> intervalu dostanu k nesmyslnému výsledku.

Toto leccos naznačuje. Buď gcc generuje špatný kód (nepravděpodobné), anebo
někde děláte něco, co nemá jasně definované chování, a při optimalizaci se to
rozbije.

Každopádně odsud těžko soudit co, takže zkusme ještě to gdb. Dejte si break
někam na ten řádek s tím scandirem (při -O2 se stane, že ta proměnná předtím
prostě neexistuje) a dejte „print &n“. Dostanete adresu toho n a poté by mělo
snad jít přidat watchpoint na tu adresu pomocí „watch * (int *) <adresa>“.
Pokud to nepůjde, nejspíš to i řekne, proč (například, že n je v registru
anebo že ještě neexistuje). V takovém případě zkuste prostě do kódu napsat
„printf("0x%lx\n", &n);“. Je samozřejmě možné, že se pak chyba přestane
projevovat, a pak už asi bude nejlepší si prostě přečíst ten asm kód, co gcc
vyrobí.

S pozdravem,
-- 
Tomáš Janoušek, a.k.a. Liskni_si, http://work.lisk.in/



Další informace o konferenci Linux