GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Woher wissen Sie, dass die angegebene gemeinsam genutzte Bibliothek mit Debug-Symbolen erstellt wurde oder nicht?

Beachten Sie, dass not stripped impliziert keine Debug-Symbole.

Bibliothekscode:

//myshared.c
#include <stdio.h>

void print_from_lib()
{
    printf("Printed from shared library\n");
}

Kompilieren mit und ohne Debug-Flags:

gcc -c -Wall -Werror -fpic myshared.c
gcc -shared -o libmyshared.so myshared.o
gcc -g -c -Wall -Werror -fpic myshared.c -o myshared-g.o
gcc -g -shared -o libmyshared-g.so myshared-g.o

Überprüfung mit file

$ file libmyshared.so
libmyshared.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=1ad3b94d5c8a7392c2140a647254753221a152cd, not stripped
$ file libmyshared-g.so 
libmyshared-g.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0268eaf97e5a670d2f7e767a011be6f06a83090a, not stripped

Beide behaupten, sie seien nicht gestrippt. Allerdings nur libmyshared-g.so zeigt die Symbole:

$ objdump --syms libmyshared.so | grep debug
$ objdump --syms libmyshared-g.so | grep debug
0000000000000000 l    d  .debug_aranges 0000000000000000              .debug_aranges
0000000000000000 l    d  .debug_info    0000000000000000              .debug_info
0000000000000000 l    d  .debug_abbrev  0000000000000000              .debug_abbrev
0000000000000000 l    d  .debug_line    0000000000000000              .debug_line
0000000000000000 l    d  .debug_str 0000000000000000              .debug_str

Sie können den Dateibefehl verwenden, um zu sehen, ob eine Datei stripped ist . Grundsätzlich bedeutet dies, dass die Debugging-Symbole vorhanden sind oder nicht.

Hier ist eine Datei von meinem System:

$ file libjsd.so
     libjsd.so: ELF 32-bit LSB shared object, \
     Intel 80386, version 1 (SYSV), dynamically linked, 
     stripped

Beachten Sie die gestrippten.

Hier ist etwas, das ich zusammengestellt habe:

$ file libprofile_rt.so
libprofile_rt.so: ELF 64-bit LSB shared object, x86-64, 
      version 1 (SYSV), dynamically linked, 
     BuildID[sha1]=0x..., not stripped

siehe 'not stripped', das anzeigt, dass es Debugging-Symbole hat.

Es ist auch möglich, Debug-Symbole mit objcopy vom gemeinsam genutzten Objekt selbst zu trennen. Dies würde Symbole in einer anderen Datei extrahieren und dann müssten Sie den Link kennen, um sie zurückzubekommen. Sie können Anweisungen dazu mit gdb unter Verwendung von build-ids sehen. Dies ist hilfreich, wenn Sie etwas ohne die Symbole ausliefern möchten, es dann aber im Handumdrehen aus einem Dump heraus debuggen können.


Linux
  1. Wie wir mit Electron eine Linux-Desktop-App erstellt haben

  2. So prüfen Sie Berechtigungen mit dem Befehl find

  3. Funktionsweise des Befehls oc debug in OpenShift

  4. Einführung in gemeinsam genutzte Linux-Bibliotheken (So erstellen Sie gemeinsam genutzte Bibliotheken)

  5. Was bedeutet Warnung:Das Verknüpfen der gemeinsam genutzten Bibliothek mit der statischen Bibliothek ist nicht portierbar?

So finden Sie Dateien mit dem fd-Befehl in Linux

Wie man die Gruppen eines Linux-Benutzers kennt

Wie ich mit dem Budget ein Homelab gebaut habe

So richten Sie googleTest als gemeinsam genutzte Bibliothek unter Linux ein

Woher weiß ich, ob die Option set -e aktiviert ist oder nicht?

Wie teilt man die Internetverbindung?