debuginfo - jak działa?

Tomasz Wittner lists w mmt.pl
Sob, 5 Cze 2004, 10:33:31 CEST


Dnia sob 5. czerwca 2004 10:00, Jakub Piotr Cłapa napisał:
> A tak ogólnie to jak potem korzystać z tych pakietów? Chciałem troche
> gstreamerowy alsasink podebugować (bo nie działa), ale samo
> zainstalowanie {gstreamer,alsa-lib}-debuginfo nic nie zmienia w pracy
> gdb. Siakaś hałtura?
Szczegółow ode mnie nie wymagaj, bo naprawdę niewiele wiem, ale

$ rpmbuild -ba trf.spec --define '_enable_debug_packages 1'
[...]
Zapisano: /home/users/inter/rpm/SRPMS/trf-0.4-0.1.src.rpm
Zapisano: /home/users/inter/rpm/RPMS/trf-0.4-0.1.athlon.rpm
Zapisano: /home/users/inter/rpm/RPMS/trf-debuginfo-0.4-0.1.athlon.rpm
$ sudo rpm -iv ../RPMS/trf-{0.4-0.1.athlon.rpm,debuginfo-0.4-0.1.athlon.rpm}
Przygotowywanie pakietów do instalacji...
trf-debuginfo-0.4-0.1
trf-0.4-0.1
$ rpm -ql trf
/usr/bin/trfs
/usr/share/doc/trf-0.4
/usr/share/doc/trf-0.4/CHANGELOG.gz
/usr/share/doc/trf-0.4/README.gz
$ rpm -ql trf-debuginfo
/usr/lib/debug/usr/bin/trfs.debug
/usr/src/debug/trf-0.4
/usr/src/debug/trf-0.4/trfs.c

o - dziwne - poprzednio nie było plików źródeł [1] 
$ file /usr/bin/trfs
/usr/bin/trfs: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for 
GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped
stripped - nie masz symboli
file /usr/lib/debug/usr/bin/trfs.debug
/usr/lib/debug/usr/bin/trfs.debug: ELF 32-bit LSB executable, Intel 80386, 
version 1 (SYSV), dynamically linked (uses shared libs), not stripped
a tu masz.

$ gdb /usr/bin/trfs
(no debugging symbols found)...Using host libthread_db library
### nie masz symboli
 "/lib/libthread_db.so.1".
(gdb) add-symbol-file /usr/lib/debug/usr/bin/trfs.debug
add symbol table from file "/usr/lib/debug/usr/bin/trfs.debug" at
(y or n) y
Reading symbols from /usr/lib/debug/usr/bin/trfs.debug...done.
### a teraz już masz.
(gdb) directory /usr/src/debug/trf-0.4/
Source directories searched: /usr/src/debug/trf-0.4:$cdir:$cwd
### a teraz pracujesz na źródłach - akurat w tym przypadku nie widziałem 
różnicy.
(gdb) b main
Breakpoint 1 at 0x8048a05: file trfs.c, line 107.
(gdb) r
Starting program: /usr/bin/trfs
Breakpoint 1, main (argc=1, argv=0xbffff2f4) at trfs.c:107
107             char            allowed_path[] =
(gdb) s
95      {
(gdb) s
282             (void)time(&atimet);
(gdb) s
95      {
(gdb) s
99              char            allowed_num[] =
(gdb) p *argv
$3 = 0xbffff469 "/usr/bin/trfs"
to by sie nawet zgadzało. I "se" dalej debugujesz.

[1] wypada odszczekać, to, co napisałem w poprzednim poście :-/, ale wcześniej 
rzeczywiście tak miałem, że pakiet debuginfo nie zawierał plików źródeł.

-- 
Tomasz Wittner



Więcej informacji o liście dyskusyjnej pld-devel-pl