第一章:巧用宏变量
__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
例如: gdb scf core.112332
例如: gdb attach 782712
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字节每单元