Hello,
I have had some trouble debugging shared libraries for a while. I
used to be able to step into shared objects during debug, but for some
reason I am no longer able to do so. When running the attached program
in gdb, I get this behavior:
---------------------------------------------
gauss$ gdb ./testprog
GNU gdb (GDB) 7.3.1
[---]
This GDB was configured as "x86_64--netbsd".
[---]
Reading symbols from /home/jan/tmp/dbgtest/testprog...done.
(gdb) break 9
Breakpoint 1 at 0x400a40: file testprog.c, line 9.
(gdb) run
Starting program: /home/jan/tmp/dbgtest/testprog
Breakpoint 1, main (argc=1, argv=0x7f7fffffdb68) at testprog.c:9
9 bar = foo(42, 72);
(gdb) step
11 printf("bar=%d\n", bar);
(gdb)
---------------------------------------------
.. I would have expected to be able to step into foo() in the shared
library.
And I used to be able to set breakpoints in functions in shared
libraries as well, but now I get:
---------------------------------------------
gauss$ gdb ./testprog
[---]
Reading symbols from /home/jan/tmp/dbgtest/testprog...done.
(gdb) break foo
Breakpoint 1 at 0x400790
(gdb) run
Starting program: /home/jan/tmp/dbgtest/testprog
Breakpoint 1, 0x0000000000400790 in foo@plt ()
---------------------------------------------
Another thing I used to do, but which no longer works:
---------------------------------------------
gauss$ gdb ./testprog
[---]
Reading symbols from /home/jan/tmp/dbgtest/testprog...done.
(gdb) break testlib.c:8
No source file named testlib.c.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (testlib.c:8) pending.
(gdb) run
Starting program: /home/jan/tmp/dbgtest/testprog
bar=114
[Inferior 1 (process 3178) exited normally]
---------------------------------------------
And when programs crash in shared libraries, the backtrace shows
nothing but "?? (??)".
I'm almost afraid to ask, as I assume there's something brutally
obvious I'm missing..
--
Kind regards,
Jan Danielsson