If you have a shared gdb-debug library on your machine, this blog post might help.



gdb unable debug shared library

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 

gdb unable debug shared library

 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 command), you can get useful confirmation from the most loaded libraries when setting your paths, which can be found in each order:

 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 .

  shared information 
  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 / + /lib/libc.so.0 :

  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.