- 10
- 0
- 约1.39万字
- 约 16页
- 2017-06-07 发布于湖北
- 举报
Linux C/C++ ( )
Linux C/C++ ( )
LLiinnuuxx环境下的CC//CC++++基础调试技术((一)) 初步了解。 【后续有二:程序控制】
1.调试技术的几个准则
惊喜准则:找到错误是一种惊喜,心理上不要畏惧而是要怀着感恩的心去面对。
从小处开始准则:刚开始测试的使用从小处着手,暂时不涉及边界数据,虽然这样可能会掩
盖一些Bug,但是这样或许能查到最主要的Bug,例如你的程序包含了一个巨大的循环体,
最容易发现的Bug 在第一个循环或第二次循环执行的时候。
自顶向下准则:优先选择step over 而不是step into,以节省时间。
Segmentation Fault 准则:出现段错误时,第一个想到的不应该是printf 而是Debugger,因为
在调试器中你能看到你的哪一行代码导致了错误,更重要的是你可以通过backtrace 等工具
得到更多有用的信息。
折半查找准则:在寻找bug 时可以充分利用编辑器等工具来进行折半查找,具体在后边有例
子说明。
2.Linux 下代码调试工具
主要使用的GDB,以及基于GDB 的图形化工具,如DDD 或eclipse,选择上看个人习惯了。
命令行式的GDB 启动较快,可以在ssh 终端下使用,操作简洁,并且在调试GUI 程序时不
会崩溃,但较之图形化则在单步调试或设置断点时非常不方便。
当然你可以使用Vim 等编辑器的插件或者补丁(clewn or vimGDB)来弥补这一缺憾,并且
在GDB6.1 以上的版本你可以使用GDB -tui 这个模式(或者在GDB 的命令行模式下按
CTRL-x-a)打开一个类似于图形界面的文本界面模式,在这个界面中你可以使用上下键查
看源代码(CTRL-P 和 CTRL-N 完成输入过的命令的查看).
或者你还可以使用cGDB 这个工具(很庆幸这个项目在停止了三年后又有人开始维护了),
这个工具是将GDB 用curses 包装了一下,提供了一些很好用的feature(Esc 和i 键在代码
和命令框间切换;在代码框中支持vim 型的操作;在命令框中支持tab 键补全命令;在移动
到想加入断点的行(行号为高亮白色)直接用空格键,设定好后行号会变红;)。另外,在调
试C-S 程序时推荐使用eclipse。
在本文中,重点介绍ddd 的操作,因为这个工具即结合了GDB 命令行和图形界面的操作。
其余请参阅各个工具的手册。
3.GDB 命令行最基本操作
设置断点:b LineNumber
运行程序:r args1 args2 ...
彻底终止程序:kill
单步执行:n(TIPs1:可以按回车重复上一次操作,在单步调试时这个feature 很有用)。
单步进入:s
继续执行:c
设置临时断点:tb LineNumber 可以理解为一次性断点,与断点不同,临时断点只在第一次
执行时起作用。
查看变量:p
设置观察点:
w Expression,当Expression 是一个变量名时,这个变量变化时会停止执行;你也可以使用
条件来限定,比如w (z28),当z 大于28 时,程序停止。注意观察点一般使用在更大范围
上的变量,而不是本地变量,因为在局部变量上设置的观察点在局部结束时(比如该变量所
在的函数执行结束时)就被取消了。
当然这并不包含main 的情况,因为main 函数执行结束后程序就结束了。
查看栈帧:
栈帧指的是在一个函数调用时,该函数调用的运行信息(包含本地变量、参数以及函数被调
用的位置)存储的地方。每当一个函数被调用时,一个新的帧就被系统压入一个由系统维护
的帧,在这个栈的顶端是现在正在运行的函数信息,当该函数调用结束时被弹出并析构。
在GDB 中,frame 0 为当前帧,frame 1 为当前帧的父帧,frame 2 为父帧的父帧,等等,用
down 命令则是反向的。这是一个很有用的信息,因为在早期的一些帧中的信息可能会给你
一些提示。
backtrace 查看整个帧栈
注意:在帧中来回并不影响程序的执行。
实例:插入排序算法调试
用伪代码描述这个过程如下:
拟调试代码如下:
//
// insertion sort,
//
// usage: insert_sort num1 num2 num3 ..., where the numi are the numbers to
// be sorted
int x[10], // input array
y[10], //
您可能关注的文档
- KX安装与电音教程V1.0.doc
- 第八章 AMS1117-1.8 PDF 中文资料.pdf
- 第八章 AMS1117-1.8 中文资料.pdf
- LabView第6讲 顺序结构.ppt
- lavazza咖啡机及seaco咖啡机价格.docx
- 第八章 AMS1117-2.5 PDF 中文资料.pdf
- 第八章 const_精髓.doc
- 第八章 Content-Addressable Network.doc
- 第八章 Control IT AC800F 用户培训资料.课程1. Control Build F 软件安装.pdf
- lcd12232原理与完整使用C函数.pdf
- 广东省广州省实验中学教育集团2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州大学附属中学2025-2026学年八年级上学期奥班期中物理试题(解析版).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(含答案).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(解析版).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 2026《中国人寿上海分公司营销员培训体系优化研究》18000字.docx
- 《生物探究性实验教学》中小学教师资格模拟试题.docx
原创力文档

文档评论(0)