标签:
#第1章**使用TUI模式的GDB**指定-tui或者CTRL+X+A
#第2章 停下来环顾程序#
**断点**通知GDB暂停程序的执行
**监视点**通知GDB当特定内存位置(或者涉及一个或多个位置的表达式)的值发生变化时暂停执行。
**捕获点**通知GDB当特定事件发生时暂停执行。
###2.4.1在GDB中设置断点###
●break *function*
●break *line_number*
●break *filename:function*
●break *filename:line_number*
**临时断点**tbreak
#第4章 程序崩溃处理
与段错误相关的数据是该页的访问权限,它类似于文件访问权限:读、写和执行。例如,页3的页表项将指出进程是否具有从该页读取数据的权限,向该页中写数据的权限,以及在该页上执行指令的权限。
>每次程序使用其全局变量之一时,需要具有对数据区域的读/访问权限。
>每次程序访问局部变量时,程序会访问栈,需要对栈区域具有读/写访问权限。
>每次程序进入或离开函数时,对该栈进行一次或多次访问,需要对栈区域具有读/写访问权限。
>每次程序访问通过调用malloc()或new创建的存储器时,都会发生堆访问,也需要读/写访问权限。
>程序执行的每个机器指令是从文本区域(或者从动态链接码的区域)取出的,因此需要具有读和执行文件。
#第7章 其它工具
有两个函数使得错误代码的解释更容易:perror()和strerror()
>perror-example.c
int main(void)
{
FILE *fp;
fp = fopen("/foo/bar","r");
if (NULL == fp)
perror("I found an error");
return 0;
}
>如果系统上没有/foo/bar,输出如下所示
>>$./a.out
>>I found an error: No such file or directory
__________
>strerror-example.c
int main(void)
{
close(s);
printf("%s\n",strerror(errno));
return 0;
}
>该程序的输出如下:
>>$./a.out
>>Bad file descriptor
**更好地使用strace和ltrace**
strace输出程序进行的各个系统调用及其参数和返回值。
ltrace类似于strace,但它显示了库调用而不是系统调用。
**静态代码检查器:lint与其衍生**
《软件调试的艺术The Art of Debugging with GDB,DDD,and Eclipse》
标签:
原文地址:http://www.cnblogs.com/codetravel/p/4534605.html