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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


第一章:巧用宏变量

__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字节每单元

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linuxc++

“LINUX下C/C++常见的几种调试程序的方法” 的相关文章