LINUX下C/C++常见的几种调试程序的方法

简介: LINUX下C/C++常见的几种调试程序的方法

第一章:巧用宏变量


__FILE__:记录源代码文件。


__LINE__:记录源代码行数。(是整数类型)


__DATE__:记录编译日期。


__TIME__: 记录编译时间


__func__:记录函数


#include <stdlib.h>
#include <stdio.h>
int main()
{
  printf("Date of make: %s, %s  \n",__DATE__,__TIME__);
  printf("FILE=%s LINE=%d\n",__FILE__,__LINE__);
  printf("func=%s\n",__func__);
  return 0;
}



第二章:巧用abrt


在linux调试程序,最痛苦的就是程序异常宕掉,但是找不到core文件,很难定位问题。但是有了core文件就容易定位多了。


一般是可以通过在环境变量中设置ulimit -c unlimited。但是现场实施人员有时会忘记设置这条命令。那么怎么办呢,可以通过设置linux的abrt服务来实现



修改abrt-action-save-package-data.conf文件


vi /etc/abrt/abrt-action-save-package-data.conf
OpenGPGCheck = no
ProcessUnpackaged = yes


将abrt服务启动


第三章:巧用gdb


Ø 给现场发布 debug 编译的文件

Ø

Ø gdb 调试 core 文件

例如: gdb scf core.112332


Ø

Ø gdb attach [ pid ]

例如: gdb attach 782712


Ø

Ø 采用 gcore 生成 core 文件

gcore -o ssp.core [pid]



gdb 常用命令


help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h


run:run argv[1] argv[2]:调试时命令行传参


list:查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l


set:设置变量的值


next:单步调试(逐过程,函数直接执行),简写n


step:单步调试(逐语句:跳入自定义函数内部执行),简写s


backtrace:查看函数的调用的栈帧和层级关系,简写bt


frame:切换函数的栈帧,简写f


info:查看函数内部局部变量的数值,简写i


finish:结束当前函数,返回到函数调用点


continue:继续运行,简写c


print:打印值及地址,简写p


quit:退出gdb,简写q


break+源代码文件:num:在第num行设置断点,简写b


info breakpoints:查看当前设置的所有断点


delete breakpoints num:删除第num个断点,简写d


display:追踪查看具体变量值


undisplay:取消追踪观察变量


watch:被设置观察点的变量发生修改时,打印显示


i watch:显示观察点


enable breakpoints:启用断点


disable breakpoints:禁用断点


x:查看内存x/20xw 显示20个单元,16进制,4字节每单元

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
25天前
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
12天前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
162 10
|
26天前
|
Ubuntu Linux 图形学
推广与体验Ubuntu Linux的便捷方法
如果你的朋友或家人对尝试Linux感兴趣,但希望在安装之前先体验一下,你可以分享以下链接给他们:Ubuntu在线导览。通过这个链接,他们可以在任何地方轻松体验Ubuntu,无需安装即可深入了解这个流行的操作系统。
|
29天前
|
XML 缓存 Linux
在Linux环境下解决Visual Studio Code字体显示异常和字体替换方法。
解决Linux下VS Code字体显示异常,需要对Linux字体渲染机制有所理解,并对VS Code的配置选项进行合理设置。替换字体时则要通过系统字体配置或VS Code设置来完成。通过上述方法,可以有效地解决字体显示问题,从而提升代码编辑的视觉体验。
115 0
|
2月前
|
网络协议 Ubuntu Linux
Wireguard in Linux的安装方法
本文介绍了如何在Ubuntu和Rocky Linux中安装配置WireGuard,并探讨了配置过程中可能出现的DNS泄露问题及解决方法,包括通过nmtui设置DNS及调整DNS优先级参数。
|
NoSQL Linux Java
在Linux的控制台中使用GDB调试程序
        由于当前的开发是在一个只有Linux内核的特定 环境进行的,Java代码可以通过远程调试功能在Windows下进行Debug,而C代码就没有那么幸运了。幸好有同事推荐了GDB,并且教给我了几个简单的命令,发现极其方便,并且功能很强大——虽然只是几个简单的命令,是整个调试过程变得妙趣横生。
858 0
|
2月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
581 13
|
3月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
342 21
|
3月前
|
JSON 自然语言处理 Linux
linux命令—tree
tree是一款强大的Linux命令行工具,用于以树状结构递归展示目录和文件,直观呈现层级关系。支持多种功能,如过滤、排序、权限显示及格式化输出等。安装方法因系统而异常用场景包括:基础用法(显示当前或指定目录结构)、核心参数应用(如层级控制-L、隐藏文件显示-a、完整路径输出-f)以及进阶操作(如磁盘空间分析--du、结合grep过滤内容、生成JSON格式列表-J等)。此外,还可生成网站目录结构图并导出为HTML文件。注意事项:使用Tab键补全路径避免错误;超大目录建议限制遍历层数;脚本中推荐禁用统计信息以优化性能。更多详情可查阅手册mantree。
linux命令—tree
|
28天前
|
监控 Linux Shell
linux命令
常用 Linux 命令汇总