Portál AbcLinuxu, 11. května 2025 00:29

Dotaz: ddd a globální struktury

15.2.2005 17:23 Bronislav Klapuch | skóre: 8
ddd a globální struktury
Přečteno: 146×
Odpovědět | Admin
Dobrý den,
když chci debuggovat céčkovský program, a chci zobrazit globální strukturu, zobrazí se jen (nejspíše)adresa v paměti v desítkovém formátu. Dále z tohoto nic dalšího nedostanu. Volba "Display()" je nedostupná. Nutno poznamenat, že zmíněný nedostatek se neobjevuje u všech globálních struktur. V distribuci SUSE 7.3 bylo prohlížení struktur bez problémů, nyní v SUSE 9.0 a 9.1 se objevuje tento problém. Jelikož sám v céčku neprogramuji, je pro mne odhalení závady ještě složitější. Budu vděčný za každou radu.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.2.2005 17:38 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: ddd a globální struktury
Odpovědět | | Sbalit | Link | Blokovat | Admin
Není to tím, že nezná typ té struktury? Co vypíše v gdb
p *struktura
? (předpokládám, že je to ukazatel).
16.2.2005 07:12 Bronislav Klapuch | skóre: 8
Rozbalit Rozbalit vše Re: ddd a globální struktury
Jak jsem již výše uvedl, "C" není moje silná stránka. Takže je možné, že to co zde napíšu je irelevantní. Nicméně :
Cannot access memory at address 0x0
Kdežto struktura, která se běžně zobrazí vypsala:
Structure has no component named operator.
16.2.2005 08:32 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: ddd a globální struktury
Cannot access memory at address 0x0

to napoveda ze prislusny pointer je NULL a teda nie je mozne vypisat data na ktore ukazuje.

16.2.2005 09:31 Bronislav Klapuch | skóre: 8
Rozbalit Rozbalit vše Re: ddd a globální struktury
Ten program je funkční, jen nelze strukturu v ddd zobrazit. V okamžiku, kdy se struktura naplní, objeví se místo 0 jiné číslo. Nicméně je to pořád jen číslo.
16.2.2005 09:41 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: ddd a globální struktury
Co je to za program, nebo aspoň jak je ta struktura deklarovaná?
(gdb) list struktura
?
16.2.2005 11:18 Bronislav Klapuch | skóre: 8
Rozbalit Rozbalit vše Re: ddd a globální struktury
No line number known for g_promenna.
Jsem vázán smlouvou, takže nemohu poskytnout o zmíněném programu další informace. Neumím napsat neutrální ukázkový příklad. Kolegové něco zkoušeli, ale tyto jejich programy prý fungují.
16.2.2005 12:49 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: ddd a globální struktury
objeví se místo 0 jiné číslo. Nicméně je to pořád jen číslo.

Ked das vypisat hodnotu pointra tak dostanes cislo, ked chces vidiet na co ten pointer ukazuje tak pouzi operator *.

Priklad

typedef struct _BUF
{
    int velkost;
    char udaje[1024];
} BUF;
...
BUF *buf = NULL;
Debugujem
(gdb) p buf
$1 = (BUF *) 0x0
po priradeni
buf = (BUF *)malloc (sizeof (BUF));
debugger povie
(gdb) p buf
$2 = (BUF *) 0x8049600
(gdb) p *buf
$3 = {velkost = 0, udaje = '\0' <repeats 1023 times>}

16.2.2005 13:15 Bronislav Klapuch | skóre: 8
Rozbalit Rozbalit vše Re: ddd a globální struktury
Podle toho, jak sleduji zdroják, není použita funkce malloc() této globální struktury, proto se zřejmě nejedná o dynamické přidělení paměti.
16.2.2005 15:30 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: ddd a globální struktury
na tom nezalezi. Kludne som tam mohol mat miesto buf = malloc() nieco ako:
BUF fero;
buf= &fero;
17.2.2005 07:36 Bronislav Klapuch | skóre: 8
Rozbalit Rozbalit vše Re: ddd a globální struktury
Děkuji za dosavadní odpovědi. Myslím, že se přece jen to céčko budu muset naučit. Obávám se, že by ode mne bylo nefér pokračovat v této debatě, dokud lépe nepochopím o čem je řeč. Proto se teď na pár dnů odmlčím. Mezitím co budu céčko studovat, pokusím se porovnat struktury, které se zobrazují, s těmi, které ne. Ten ukázkový příklad struktury mi funguje, tak jak píšete.
17.2.2005 09:17 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: ddd a globální struktury
Este ma napadla jedna vec. Ak mas ten pointer neinicializovany (ukazuje na pamat, ktora nie je tvoja) tak ti ho debugger moze vypisat ako cislo , ale nebude sa dat vypisat na co ukazuje. Preto odporucam, kazdu premennu inicializovat na nejaku hodnotu hned pri deklaracii.

A ten postoj vyjadreny v tomto prispevku je veeelmi spravny ;-). Good luck.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.