zoukankan      html  css  js  c++  java
  • 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, 源文件,可操作性极强,建议感兴趣的朋友亲自动手操作演练,希望对大家有所帮助。

  • 相关阅读:
    Yii2.0 rules验证规则大全
    面试官: 谈谈什么是守护线程以及作用 ?
    Spring Boot 2.0 WebFlux 教程 (一) | 入门篇
    Spring Boot 入门教程 | 图文讲解
    Spring Boot 2.0 图文教程 | 集成邮件发送功能
    面试官: 说说看, 什么是 Hook (钩子) 线程以及应用场景?
    性能测试工具 wrk 使用教程
    关于 Docker 镜像的操作,看完这篇就够啦 !(下)
    关于 Docker 镜像的操作,看完这篇就够啦 !(上)
    Docker 上传镜像
  • 原文地址:https://www.cnblogs.com/snake553/p/7017568.html
Copyright © 2011-2022 走看看