Trapi me gdb
Egon Eckert
egon na www.capitol.cz
Čtvrtek Prosinec 11 15:55:02 CET 1997
Zdravim,
velmi me trapi gdb. Debuguju vetsi program v c++ (binarka ma vcetne debug
info) asi 800 kilo, a gdb je casto seredne zmaten. Nahodne nefunguje 'next'
ani 'step' (rozbehnou se dopryc), nema tuseni o existenci lokalnich
promennych, nevi kde je (!) - napriklad :
<--- cut --->
(gdb) c
Continuing.
Breakpoint 3, PrecalcList::Get () at ../tools/precalc.cpp:331
(gdb) info break
Num Type Disp Enb Address What
3 breakpoint keep y 0x08062a20 in Holder::avail(void) const
at ../tools/precalc.cpp:331
breakpoint already hit 1 time
(gdb) info locals
this = (Holder *) 0xda9
(gdb) info stack
#0 PrecalcList::Get () at ../tools/precalc.cpp:331
#1 0x8058bdc in Handler_Manip::Run () at ../tools/h_manip.cpp:430
#2 0x804ccc6 in MetaServer::Step (this=0x809c128, sn=35)
<--- cut --->
Koukejte : program se zastavil na breakpointu 3 ve funkci PrecalcList::Get.
Gdb se ovsem domniva, ze breakpoint 3 lezi ve funkci Holder::avail a 'info
locals' je taky nesmyslne, protoze PrecalcList::Get (ve ktere se doopravdy
nachazi), je staticka (takze nema this) a ma spoustu lokalnich promennych.
'info stack' je ale spravne.
Holder::avail je definovana inline, vsechny moduly jsou prelozeny samozrejme
s -g, bez -O*. Takze se IMHO inline expansion nekona.
Funkce PrecalcList::Get je v modulu precalc.o definovana jako posledni, za
ni nasleduji uz jen definice pouzitych inline funkci, jako prave treba
Holder::avail, ktera je tam jako uplne posledni (v sekci .text).
System je Debian 1.3.1 (gdb 4.16, gcc 2.7.2.1, jadro 2.0.30).
Co myslite, ze ho plete ? Staticke metody ? (Ne)inline funkce ? C++ ?
Diky za namet,
Egon Eckert
Další informace o konferenci Linux