GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengetahui perpustakaan bersama yang diberikan dibangun dengan simbol debug atau tidak?

Perhatikan bahwa not stripped tidak menyiratkan simbol debug.

Kode perpustakaan:

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

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

Mengkompilasi dengan dan tanpa flag debug:

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

Memeriksa dengan 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

Keduanya mengklaim mereka tidak dilucuti. Namun hanya libmyshared-g.so menunjukkan simbol:

$ 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

Anda dapat menggunakan perintah file untuk melihat apakah sebuah file adalah stripped . Pada dasarnya, ini berarti simbol debug ada atau tidak.

Ini satu file dari sistem saya:

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

Perhatikan yang dilucuti.

Ini sesuatu yang saya kompilasi:

$ 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

lihat 'tidak dilucuti', yang menunjukkan ia memiliki simbol debug.

Dimungkinkan juga untuk memisahkan simbol debug dari objek bersama itu sendiri menggunakan objcopy. Ini akan mengekstrak simbol di file lain dan kemudian Anda perlu mengetahui tautan untuk mendapatkannya kembali. Anda dapat melihat petunjuk untuk melakukan ini dengan gdb menggunakan build-id. Ini berguna jika Anda ingin mengirimkan sesuatu tanpa simbol, tetapi kemudian dapat men-debug-nya dalam keadaan darurat dari dump.


Linux
  1. Bagaimana perintah oc debug bekerja di OpenShift

  2. Pengantar Pustaka Bersama Linux (Cara Membuat Pustaka Bersama)

  3. Bagaimana skrip bash dapat mengetahui direktori tempat ia diinstal ketika bersumber dari . operator?

  1. Cara menginisialisasi perpustakaan bersama di Linux

  2. Bagaimana cara membuat versi perpustakaan bersama di Linux?

  3. Apa arti dari Peringatan:Menautkan pustaka bersama dengan pustaka statis tidak portabel?

  1. Bagaimana kami membangun aplikasi desktop Linux dengan Electron

  2. Bagaimana saya bisa tahu apakah opsi set -e diaktifkan atau tidak?

  3. Bagaimana cara berbagi koneksi internet?