How to read and load symbols selectively while attaching a process in gdb?

后端 未结 1 1222
一生所求
一生所求 2021-01-14 20:29

My binary uses a number of different shared libraries. While attaching the process with gdb, it takes around 5 minutes to load and read symbols from all of these libraries.<

1条回答
  •  清酒与你
    2021-01-14 21:24

    You can set auto-solib-add off and then use the sharedlibrary command to selectively load symbols. Example:

    $ gdb -e ./a.out
    (gdb) set auto-solib-add off
    (gdb) file a.out
    Reading symbols from a.out...done.
    (gdb) start
    Temporary breakpoint 1 at 0x4004ba: file sig.c, line 4.
    Starting program: /home/a3f/a.out 
    
    Temporary breakpoint 1, main () at sig.c:4
    4       do();
    (gdb) print environ
    No symbol "environ" in current context.
    (gdb) info shared
    From                To                  Syms Read   Shared Object Library
    0x00007ffff7ddcae0  0x00007ffff7df5130  No          /lib64/ld-linux-x86-64.so.2
                                            No          linux-vdso.so.1
    0x00007ffff7a504a0  0x00007ffff7b7cc73  No          /lib/x86_64-linux-gnu/libc.so.6
    (gdb) sharedlibrary libc
    Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libc-2.19.so...done.
    done.
    Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6
    (gdb) print environ
     $1 = (char **) 0x7fffffffe3b8
    (gdb) print _dl_open
    No symbol "_dl_open" in current context.
    (gdb) sharedlibrary
    Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.19.so...done.
    done.
    Loaded symbols for /lib64/ld-linux-x86-64.so.2
    (gdb) print _dl_open
    $1 = {void *(const char *, int, const void *, Lmid_t, int, char **, char **)} 0x7ffff7dee350 <_dl_open>
    

    0 讨论(0)
提交回复
热议问题