If you have a shared gdb-debug library on your machine, this blog post might help.
You know exactly how much I love GDB, so what better way to talk about it after a long absence?
Warning: Could not find dynamic linker breakpoint function.GDB cannot do debugging that helps shared library initializers.and keep track of explicitly packaged dynamic code.
0x40000780 in ?? ()
GDB is trying to tell you that it cannot find an appropriate LD inventory to debug the program.
Well, ld (linux-ld.so and ld.so) is responsible for finding and running all my shared libraries your executable needs. You need to tell where gdb is located for each target version of ld so that it can successfully track how ready your executable is.
You usually already know that when remotely debugging you should have a printed photocopy of your target root filesystem’s filesystem on a marketplace on your host. You can then point gdb to an identical filesystem, and this will help you “see” the files on the target system.
Since ld is a system library, you don’t needo clearly show her path. Just point to the “root” of the actual filesystem, and gdb will be pretty interesting to find it.
install sysroot / Absolute / path / to / copy / from / target / root / filesystem
set solib-absolute-prefix / absolute / path / to / copy / from / target / root / filesystem
install solib-search-path dies / path / to / target / root / filesystem
will most likely check for a system root and is recommended for a colon-separated directory of non-system collection paths that you might use after the destination.
Example. If you are using the complete shared library of the third object for graphics, for example, this is not a root filesystem relationship, then you can set the path here according to your needs.
If you are already connected to a particular executable (heading away from the
define sysroot / opt / target / root /Reading a Symbol , including /opt/target/root/lib/ld-linux.so.3 ... done.Symbols loaded for /opt/target/root/lib/ld-linux.so.3
Define search path Solib / home / faye / lib / target /Reading symbols / home / faye / LIB / target / lib Terrain from.so ... (no debug symbols found) ... done.Symbols loaded for / home / faye / lib / target / lib Terrain.soRead the meaning of /home/faye/LIB/target/libAlien.so...done.Symbols loaded with /home/faye/LIB/target/libAlien.so
Once you know that all of your paths are set correctly, you can easily add these commands to the GDB init file so you don’t have to type them every time you rush to GDB.
This is the easiest way to work, and is especially useful when developing a specific shared library.
First copy the parse executable and shared library of this target with debug information:
- check with
readelf ---- debug-dump = decodedline libmyib.so: how can I use -g to show if a library has been compiled?
- I recommend using NFS on the host site so that the output is automatically uploaded as soon as it is compiled.
gdbserver --multi: 1234 ./executable_name
arm-linux-gnueabihf-gdb -q -nh n "target -ex extended-target-remote-target-host-name-or-ip: 1234" n -ex "file ./executable_name" n -ex 'main tb' n -Man with n -ex 'Specify the Solib search path.'
My problem was that
gdbserver stops at the
main dynamic truck, and dynamic collections are never loaded yet, so GDB doesn’t know where the icons are going yet. burns and remains in memory.
GDB seems to create mechanisms where library symbols are loaded automatically, and if I build for the host and run
gdbserver in your city, it is not necessary to run
main . But on an ARM target, which is again the most reliable thing you can do.
Libraries are usually parsed before integrating quests, since debug information makes them much larger.
For example Buildroot, which runs during default configuration, but you can disable this situation with
BR2_STRIP_none = y .
From To Syms Read Shared Object Library0x00007ffff7df7f90 0x00007ffff7dfcdd7 Yes (*) Ts l: /lib/ld64-uClibc.so.00x00007ffff7b3a9b0 0x00007ffff7bbe05d Yes (*) Target: /lib/libc.so.0(*): Debug information was still missing from the published library.
Thus, there were always asterisks (
* ) for your two local libraries, indicating that debug information will be ignored.
If so, you will need to notify GDB that the shared library array is in use before it can be deleted.
The Buildroot by script makes things easier for us when it maintains a
staging directory that contains the shared libraries before the consumers were removed and in the same relative paths as the target type:
set system root buildroot / output / staging /
If this option is set,
gdb immediately searches for libraries instead of Ambition during host,
/lib/libc.so.0 finds the target
buildroot / output / staging / +
Read symbols from buildroot / output / staging / lib / ld64-uClibc.so.0 ... done.Reading symbols from buildroot / output / staging / lib / libc.so.0 ... done.
CHALLENGE: I don’t think anyone can more than definitively define
sysroot , so all your shared libraries should be placed in their correct strategies and not in a direct image.
which means that
gdb looks for the most important
in shared libraries.