第一章初涉调试会话
调试工具
- GDB
Unix下最常用的调试工具
DDD
基于GUI的调试器,大多数工具都是GDB的GUI前端。
Eclipse
IDE也是一种调试工具
atoi( )把字符串变为整数,头文件是include<stdlib.h>
gcc -g -Wall -o insert_sort ins.c
-g选项可以让编译器将符号表(对应于程序的变量和代码行的内存地址列表)保存在生成的可执行文件里中。
这样才能在调试会话的过程中引用源代码中的变量和行号,比如“在第30行停止”或者“输出x的值”。
gdb insert_sort -tui 可以在调试的时候显示源代码
可以用Ctrl+X+A来打开或者关闭源代码的窗口
run + 参数运行程序
Ctrl+C可以停止程序,开程序结束在那一行
然后continue,再看看程序结束在那一行
$1是GDB输出的第一个值,$2、$3等表示的值统称为调试会话的值历史。
break 30 if num_y==1
clear命令用来删除断点
clear 30
info break用来查找设置的端点
break 36
cond 3 new_y==19
next和step都是单步调试,如果没有在函数中设置断点,next不会进入到函数中,而step会进入到函数中
第二章停下来环顾程序
gdb符号调试器,可以暂停程序的执行,暂停以后,调试器提供了变量检查、跟踪执行路径等机会。
暂停机制
断点:breakpoint
监视点:hw watchpoint
捕获点:catch fork
一开始这三个都被称为断点
GDB中关于位置的含义非常灵活,它可以指各种源代码、代码地址、源代码文件中的行号或者函数的入口等。
GDB断点停止的那一行并不是最后执行的代码,而是将要执行的下一行的代码。
GDB工作针对的是机器语言指令,然而可以使用源代码行,是因为可执行文件包含了额外的信息。
跟踪断点
创建断点时GDB会告知你分配给该断点的编号。
info breakpoints可以查看断点
delete 1 3 4
可以删除断点1,监视点3及捕获点4
在GDB中设置断点
break function,在函数function的入口,第一行可执行代码处设置断点
break line_number,在当前活动源代码文件的line_number处设置断点
break filename:line_number,如果filename不在当前工作目录中,则可以给出相对路径名
tbreak foo.c:10,这个设置的是临时断点
GDB设置的断点位置可能与请求将断点放置位置不同。
在调试完成之前永远不应当优化代码。
如果同一行源代码有多个断点时,只会有一个断点触发中断,而且出发中断的点将是标识符编号最小的点。
第三章 检查和设置变量
第4章 程序崩溃处理
第5章 多活动上下文中的调试
第6章 特殊主题
第7章 其他工具