最近想研究下linux虚拟内存模型,所以跟踪了下glibc的源码,下面分享下跟踪调试glibc的过程:
1、查看机器的glibc的版本

2、在网上下载源码

3、解压,编译
tar -xzvf glibc-2.17.tar.gz
export glibc_install="$(pwd)/glib-2.17/build/install"
cd glib-2.17
mkdir build
cd build
../configure --prefix "$glibc_install"
make -j `nproc`
make install -j `nproc`
编译的结果在 ./glibc-2.17/build/install/

(加一句:如果想查看libc库的宏定义,那么解压glibc-2.17.tar.gz之后,修改glibc-2.17/Makeconfig, 在最后加上 +cflags += -ggdb3,这样编译出来的lib有16M左右 ,如下图所示:)

4、编写 test_main.sh
#!/usr/bin/env bash
set -eux
gcc \
-L "${glibc_install}/lib" \
-I "${glibc_install}/include" \
-Wl,--rpath="${glibc_install}/lib" \
-Wl,--dynamic-linker="${glibc_install}/lib/ld-linux-x86-64.so.2" \
-std=c11 \
-gdwarf-2\
-ggdb3 \
-o main.out \
-v \
main.c \
;
ldd ./main.out
./main.out
5、编写main.c
#include <stdio.h>
#define TEST "test"
int main()
{
int *p = malloc(sizeof(int));
free(p);
}
6、测试
sh test_main.sh
gdb main.out

(如果想查看宏定义, 在gdb输入 info macro TEST 或者 macro expend TEST)
网友评论