前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux系统下如何调试C/C++程序【越早知道越好】

linux系统下如何调试C/C++程序【越早知道越好】

原创
作者头像
liuzhen007
发布2023-09-23 23:37:42
5840
发布2023-09-23 23:37:42
举报
文章被收录于专栏:流媒体音视频

前言

研发语言是C或者C++的小伙伴,无论是从事服务端开发,还是客户端开发,都需要掌握linux系统下关于C/C++代码的调试能力。

正文

1. 入门示例

1.1 代码

首先,我们通过一段存在问题的代码来演示整个调试过程以及问题分析定位的方法和手段。

示例代码:

代码语言:javascript
复制
#include<stdlib.h>
int main()
{
    int *ptr = NULL;
    *ptr = 0;
    return 0;
}

1.2 编译

编译命令:

g++ -g -o dump dump.cc

执行dump可执行命令,会提示段错误:

Segmentation fault (core dumped)

注意:后面的括号非常重要,只有提示“core dumped”时才表示生成了coredump文件。

1.3 设置路径

一般,coredump文件的生成路径会声明在/proc/sys/kernel/core_pattern文件中,默认值如下:

另外,我们也可以自己指定coredump文件的存储路径,比如/data/coredump,同时,还可以指定具体的文件名称的格式,比如core.%e.%p.%t,其中%e表示程序名称,%p表示进程名称,%t表示时间。

具体的命令如下:

echo "/data/coredump/core.%e.%p.%t" > /proc/sys/kernel/core_pattern

然后,把coredump文件拷贝到可执行文件同级目录下,指定coredump文件再次运行可执行文件,命令如下:

gdb dump core.dump.2714.1683101747

运行结果如下:

通过结果可以知道,程序在第5行发生了异常。

2. 注意事项

2.1 没有指明调试信息

如果在调试运行时提示如下信息:

Reading symbols from ...(no debugging symbols found)...done.

很可能是因为在程序编译时没有指定-g参数,如果没有符号表信息,我们是无法正常调试的。

2.2 coredump文件没有生成

常见的原因有两个,一是没有设置coredump文件大小,因为默认是0,所以不生成,可以使用如下命令:

ulimit -c unlimited

二是权限问题,可以尝试切换root用户再次运行可执行程序。

2.3 coredump文件命名规则

除了上文提到的%e、%p、%t三种命名格式,还有如下几种:

%u表示添加当前uid;

%g表示添加当前gid;

%s表示添加导致产生core的信号;

%h 表示添加主机名。


作者简介: 😄大家好,我是 Data-Mining(liuzhen007),是一名典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解。同时也是 CSDN 博客专家(博客之星)、华为云享专家(共创编辑、十佳博主)、51CTO社区编辑、InfoQ 签约作者,欢迎关注我分享更多干货! 😄

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
    • 1. 入门示例
      • 1.1 代码
      • 1.2 编译
      • 1.3 设置路径
    • 2. 注意事项
      • 2.1 没有指明调试信息
      • 2.2 coredump文件没有生成
      • 2.3 coredump文件命名规则
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档