🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
Docker启动过程中,要运行gdb,需要在启动时加上--privileged=true参数,具体可以看: dockercontainer下gdb无法正常工作的解决办法 ``` docker run --privileged=true -it -v ~/dev/share:/home/binss --name="gpp" ubuntu /bin/bash ``` 下面是一段简单的代码: ![](https://img.kancloud.cn/4a/2a/4a2a96aa950359a9091422805261fb43_640x320.png) ``` gcc -g3 -O0 -gdwarf-4 -ggdb test.c -o test ``` 运行出core,我们通过ulimit -c unlimited在当前文件夹下产生core文件,具体可以看 Linux 下如何产生core文件(core dump设置) 发现是没有temp文件导致的,创建touch temp后继续运行。 gdb a.out\> l\> b 5\> r\> s 出现错误 \_IO\_new\_fopen (filename=0x5555555547e6 "./temp", mode=0x5555555547e4 "r") at iofopen.c:8888 iofopen.c: No such file or directory. 这是需要我们去下载glibc源文件 root@28dcf784e1be:/home/binss# ldd a.outlinux-vdso.so.1 (0x00007ffd7b3c1000)libc.so.6 => /lib/x86\_64-linux-gnu/libc.so.6 (0x00007f63d95b1000)/lib64/ld-linux-x86-64.so.2 (0x00007f63d9ba4000) 依赖的是 libc.so.6 直接查看 /lib/x86\_64-linux-gnu/libc.so.6root@28dcf784e1be:/home/binss# ll /lib/x86\_64-linux-gnu/libc.so.6lrwxrwxrwx 1 root root 12 Apr 16 20:14 /lib/x86\_64-linux-gnu/libc.so.6 -> libc-2.27.so\*执行 libc-2.27.so 接着我们下载libc的源代码,需要修改下source.list 具体的源可以查看:https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/,注意打开deb-source,下载源代码。 安装完代码后,我们就可以开始调试了。 ## GDB指定源文件目录 ``` (gdb) directory /home/binss/glibc-2.27/libio ``` 设置好源代码搜索目录,下面开始调试。 通过gdb可以直接定位到fwrite的源码,源码如下,位于./libio/iofwrite.c。 设置gdb选项 ``` set print pretty on ``` ## gdb调试宏定义 怎么在gdb中调试宏,可以参照https://sourceware.org/gdb/onlinedocs/gdb/Macros.html ``` gcc -g3 -O0 -gdwarf-2 test.c ```