Gdb: Getting started

调试工具:

gdb

splint(lint)

cxref

cflow

gprof(prof)



程序调试的五个阶段:

测试

固化

定位

纠正

验证



1.C语言定义的预处理器可以用来调试:

_LINE_

_FILE_

_DATE_

_TIME_



2.用库函数断言调试:

如果假设不成立就停止程序运行

#include<assert.h>

voidassert(initexpression)

expression表达式的值不为0,就发送错误信息,调用abort结束程序。

#defineNDEBUG //定义这个宏可以关闭断言



###################################################################

3.Gnu的调试器gdb



要想用gdb进行调试,需要在gcc进行编译时指定为可调式:

gcc -g 指定程序在编译时包含调试信息,才能使用gdb



gdb -options executable-file

strip filename 调试完后删除调试信息



进入gdb后可使用的gdb命令:

gdb:进入gdb

help:查看gdb命令的分类

help $commands_of_classes:查看同类命令

help $command:查看命令详细信息

quit:退出gdb

------------------------------------------------------

list number 显示number行附近的内容

list main 显示main函数附近的行

list 从上次显示结束位置开始再次显示listsize

showlistsize 查看默认list命令显示的行数listsize

search string 在源代码中查找字符串



break number number行设置断点

breakmain main函数开始运行时停止

breakfilename:number 在文件filenamenumber行设置断点

clearmain 删除main函数上的断点

clearnumber 删除number行上的断点

clearfilename:number 删除filename文件中的number行的断点

info breakpoints 查看断点信息



watch var 设置监视点,当var变量值改变后,gdb停止

catch function 程序调用function函数gdb停止



run args 运行待调试的程序,传递参数

run arg1 arg2 给程序传递参数运行

continue继续运行停止的程序

next单条语句执行

finish 退出函数

printvar 查看变量

start args 开始运行函数到main这里停止,传递参数。

step 单步调试



###################################################################

4.内存调试

unixlinux程序运行失败时,会产生一个核心转储(core dump),保存在core文件中,这个文件是程序的内存映像文件。


段错误(segmentationfault)是内存的错误。


electricFence函数库:

可以发现隐含的内存错误

gcc -o myapp -lefence

gdb myapp


valgrind工具:

可以发现内存泄漏和下标越界

valgrind --leak-check=yes -v ./myapp


未完待续......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值