码迷,mamicode.com
首页 > 数据库 > 详细

《软件调试的艺术The Art of Debugging with GDB,DDD,and Eclipse》

时间:2015-05-28 00:21:12      阅读:988      评论:0      收藏:0      [点我收藏+]

标签:

#第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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!