为了跟踪glibc库中函数的执行,需要带有debug symbol的glibc, 如果是debian或者是基于debian的发行版本如ubuntu和linuxmint之类的,很简单执行如下指令安装即可。

#apt-get install libc6-dbg

libc6-dbg其实只是包含libc6中的debug symbol.

如何判断一个可执行文件或者动态链接库含有debug symbols,可以使用readelf来验证。

#readelf -w prog_name

也许你会想直接去下载glibc然后编译安装,但编译glibc确实不是一件很简单的事情,还是借助于已有的系统好。如果当前使用的是archlinux,那么事情就会很简单了。

步骤一 安装abs

#pacman -S abs

步骤二 运行abs,下载ports tree

#abs

步骤三 将glibc拷贝到任意目录,如/tmp

#cp -a /var/abs/core/glibc /tmp

步骤四 修改glibc目录下的PKGBUILD,使options看起来如下所示

options=('debug !strip')

解释一下!strip表示不strip symbol, debug表示编译时带加上debug symbol

步骤五 开始编译

#makepkg --asroot --nocheck

--nocheck 要带上,否则编译会出错

步骤六 等待编译完成,安装新包

#pacman -U glibc-2.18-2-i686.pkg.tar.xz

步骤七 验证glibc是否含有debug symbol

方法一 关注屏幕输出是否含有"-g"选项

方法二 写一个简单的hello,world

#include <stdlib.h>
#include <stdio.h> int main(int argc, char** argv) {
printf("hello,world\n");
return ;
}
#gcc -o test -g test.c

然后使用gdb进行debug,断点设置为_start, 如果运行后在断点处显示处具体的文件名和行号,那么表明一切如预期的那样。下图显示了一个成功的例子

Reading symbols from /root/glibc/src/glibc-2.18/malloc/test...done.
(gdb) break _start
Breakpoint at 0x8048360: file ../sysdeps/i386/start.S, line .
(gdb) r
Starting program: /root/glibc/src/glibc-2.18/malloc/test
warning: Could not load shared library symbols for linux-gate.so..
Do you need "set solib-search-path" or "set sysroot"? Breakpoint , _start () at ../sysdeps/i386/start.S:
xorl %ebp, %ebp
(gdb)

每天学点GDB 11的更多相关文章

  1. 尚学linux课程---11、vim操作命令1

    尚学linux课程---11.vim操作命令1 一.总结 一句话总结: 要看不同的视频,每个视频的关键点都不一样,不如之间的的视频就没讲到vim中set nu是什么意思 1.Vi有三种基本工作模式? ...

  2. 尚学python课程---11、linux环境下安装python注意

    尚学python课程---11.linux环境下安装python注意 一.总结 一句话总结: 准备安装依赖包:zlib.openssl:yum install zlib* openssl*:pytho ...

  3. 小白学 Python(11):基础数据结构(元组)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  4. 每天学点GDB 15

    本节重点描述两个gdb集成测试环境 有没有办法在一边调试的时候,一边显示对应的源码呢?有没有一种工具能够将gdb集成到ide中呢,本文就试图回答这些问题. emacs gdb 在linux的世界里,e ...

  5. 每天学点GDB 13

    ptrace是gdb实现的基石,本文简要介绍一下ptrace. ptrace linux提供的系统调用ptrace,使得一个进程可以attach到另一个进程并进而完整的控制被attach上的进程. 被 ...

  6. 每天学点GDB 12

    本文介绍在archlinux环境下,如何进行内核使用gdb配合qemu进行调试.   1. 安装qemu   2. 编译linux kernel 选择最新的内核版本,规避gcc编译出错的问题具体步骤如 ...

  7. Rhythmk 一步一步学 JAVA(11)Ibatis 环境配置

    1.项目文件分布. 2.example1.java: package com.rhythmk.example1; import java.io.IOException; import java.io. ...

  8. NOIP2018学军中学游记(11.09~11.11)

    前言 这篇博客记录的是我在\(NOIP2018\)提高组比赛中的经历. 这一次的\(NOIP\)是在学军中学举办的, 莫名感到一阵慌张. 但愿能有一个好成绩,不然就要\(AFO\)了... ... 说 ...

  9. 小白学Python(11)——pyecharts,绘制饼图 Pie

    Pie-基本示例 from example.commons import Faker from pyecharts import options as opts from pyecharts.char ...

随机推荐

  1. Java 全半角转换

    * 全角转半角的 转换函数* @return String*/public static final String full2HalfChange(String QJstr){StringBuffer ...

  2. Mysql DDL与DML

    1,文件导入:LOAD DATA INFILE '/tmp/pet.txt' INTO TABLE pet FIELDS TERMINATED BY ',' LINES TERMINATED BY ' ...

  3. Android ViewHolder工具

    import android.util.SparseArray; import android.view.View; /** * 封装了setTag()和getTag()方法 * 封装了findVie ...

  4. 6.原型模式(Prototype Pattern)

    using System; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { // 孙 ...

  5. Java Hour 13 集合基础

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为13 Hour,请各位不吝赐教. Java 中的集 ...

  6. mysql事务处理的意义

    MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关 1.MyISAM:不支持事务,用于只读程序提高性能 .InnoDB:支持ACID事务.行级锁.并发 .Berkeley DB:支 ...

  7. 关于html5不支持frameset的解决方法

    转自:http://blog.sina.com.cn/s/blog_b2813a790101ejvf.html html5已经不支持frameset了,很郁闷,看了大家的解决方法,无非就是两种1. 使 ...

  8. 电赛总结(四)——波形发生芯片总结之AD9834

    一.特性参数 1.2.3V~5.5V供电 2.输出频率高达37.5MHz 3.正弦波.三角波输出 4.提供相位调制和频率调制功能 5.除非另有说明,VDD = 2.3 V至5.5 V,AGND = D ...

  9. Cygwin: connection closed by ::1

    问题描述:在Win7下Cygwin中,使用ssh localhost命令, 出现Connectionclosedby::1的问题. 解决方案:1.我的电脑-管理-找到CYGWINsshd. 2.右键 ...

  10. POJ1947 Rebuilding Roads(树形DP)

    题目大概是给一棵树,问最少删几条边可以出现一个包含点数为p的连通块. 任何一个连通块都是某棵根属于连通块的子树的上面一部分,所以容易想到用树形DP解决: dp[u][k]表示以u为根的子树中,包含根的 ...