• test


    4. GDB调试动态链接库对于动态链接库的调试和单个的执行文件差别较大,相对于静态链接库的调试只需要对makefile

    稍作修改,具体改动如下:

    生成相应的动态库并copy到系统目录

    g++ -g -c -fPIC -o testobj.o testobj.cc
    g++ -g  -shared -o libtest.so testobj.o
    sudo cp libtest.so /lib/libtest.so

    makefile

    复制代码
    CC=gcc
    CXX=g++
    RM=rm -f
    CPPFLAGS=-g
    LDFLAGS=-g
    LDLIBS=-ltest
    AR=ar
    
    SRCS=main.cc functions.cc
    OBJS=$(subst .cc,.o,$(SRCS))
    
    all: main
    main: $(OBJS) libtest.so
        $(CXX) $(LDFLAGS) -o main $(OBJS) -L. $(LDLIBS) 
        
    main.o: main.cc functions.h testobj.h
    
    functions.o: functions.h functions.cc
    
    clean:
        $(RM) $(OBJS)
    
    all-clean: clean
        $(RM) main
    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    调试结果如下:<br>solidmango@solidmango-pc:~/testmake/Test_L1$ gdb main
    GNU gdb (Ubuntu 7.7-0ubuntu3) 7.7
    Copyright (C) 2014 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from main...done.
    (gdb) b TestObj
    Breakpoint 1 at 0x400910
    (gdb) r
    Starting program: /home/solidmango/testmake/Test_L1/main
    Enter two numbers:
    7
    8
    The sum of 7 and 8 is 15
    I am in a function!
     
    Breakpoint 1, 0x0000000000400910 in TestObj()@plt ()
    (gdb) s
    Single stepping until exit from function _Z7TestObjv@plt,
    which has no line number information.
    TestObj () at testobj.cc:3
    3   {
    (gdb) bt
    #0  TestObj () at testobj.cc:3
    #1  0x0000000000400b05 in main () at main.cc:17
    (gdb) info sharedlibrary
    From                To                  Syms Read   Shared Object Library
    0x00007ffff7ddaae0  0x00007ffff7df54e0  Yes         /lib64/ld-linux-x86-64.so.2
    0x00007ffff7bd8850  0x00007ffff7bd89c5  Yes         /lib/libtest.so
    0x00007ffff792f5c0  0x00007ffff799299a  Yes (*)     /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    0x00007ffff752d4a0  0x00007ffff7673413  Yes         /lib/x86_64-linux-gnu/libc.so.6
    0x00007ffff720d610  0x00007ffff727c1b6  Yes         /lib/x86_64-linux-gnu/libm.so.6
    0x00007ffff6ff4ab0  0x00007ffff7004995  Yes (*)     /lib/x86_64-linux-gnu/libgcc_s.so.1
    (*): Shared library is missing debugging information.
    (gdb) list
    1   #include<iostream>
    2   int TestObj(void)
    3   {
    4       std::cout << "I am in TestObj!" << std::endl;
    5       return 0;
    6   }
    (gdb)

    总结

    本文总结了Linux下基于GDB的3种情况的调试方式,其中包括单个可执行文件,静态链接,动态链接,并给出了完整的makefile, 源文件,可操作性极强,建议感兴趣的朋友亲自动手操作演练,希望对大家有所帮助。

  • 相关阅读:
    第4課 部屋に机といずがあらます。
    (转)三层结构设计与ERP部署规划
    多线程的一个问题(同步事件和等待句柄)转
    C#操作xml小结(转)
    再论Assembly Registration Tool (Regasm.exe)
    再论Type Library Importer (Tlbimp.exe)
    Blittable and NonBlittable Types
    再论Importing a Type Library as an Assembly
    .Net Remoting(基本操作) Part.2 (转)
    Monitor类示例(转)
  • 原文地址:https://www.cnblogs.com/snake553/p/7017568.html
Copyright © 2020-2023  润新知