ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

gdb 重定位源文件目录

2021-08-17 13:01:24  阅读:197  来源: 互联网

标签:定位 文件目录 gdb sockfd path rcvbuf include


问题

在进行 gdb 调试的时候,有时候,我们会遇到使用的符号表对应的源文件目录和实际机器上的源文件目录不一致的情况。

在这个时候,在 gdb 内输入layout src命令并不能显示出对应的源文件

解决方案

我们可以通过 gdb 的set substitute-path /path/to/symbol/source/dir /path/to/actual/source/dir重定位源文件目录解决

实践方法

  1. 首先写个测试程序rcvbuf.c
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <linux/netlink.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
        int sockfd;
        int32_t buflen;
        size_t len = sizeof(buflen);
        int ret;

        sockfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_AUDIT);
        if (sockfd < 0) {
                fprintf(stderr, "create socket fail\n");
                return -1;
        }

        ret = getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &buflen, &len);
        if (ret < 0) {
                fprintf(stderr, "getsockopt fail\n");
        }

        printf("SO_RCVBUF is %u\n", buflen);
        printf("sizelen is %lu\n", len);
out:
        close(sockfd);
        return ret;
}
  1. 编译带符号表的可执行文件,并将源文件移动到新目录
$ gcc -g -o rcvbuf rcvbuf.c
$ mv /path/to/current/rcvbuf.c /path/to/another/rcvbuf.c
  1. gdb 调试可执行文件
$ gdb rcvbuf
(gdb) b main
(gdb) r
(gdb) layout src  // 这是看不到源文件
(gdb) set substitute-path /path/to/current /path/to/another  // 这是可以看到源文件

标签:定位,文件目录,gdb,sockfd,path,rcvbuf,include
来源: https://www.cnblogs.com/sun-ye/p/15151813.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有