码迷,mamicode.com
首页 > 其他好文 > 详细

《软件调试艺术》读后感六

时间:2015-06-06 18:16:01      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:gdb   调试   内存   

1、监视局部变量

    在GDB中,可以通过调用info locals命令得到当前桟帧中的所有局部变量的值的列表。

2、直接检查内存

      在有些情况下,可能希望检查给定地址的内存,而不是通过变量的名称。GDB为这种目的提供x命令。

      print和display的高级选项,print和display命令允许指定可选的格式。例如p /x y,这样会以十六进制格式显示,而不是十进制格式,其它常用的格式为c(字符),s(字符串),f(浮点数)。

       如果你想禁用某一个选项,GDB提供了dis命令,dis disp number如果条目你不记得,那你一定要使用info disp来查看条目。大家知道,如果有禁止,就肯定会有启用,启用命令当然是大家熟知的enable,如enable disp number,如果想完全删除某个条目,那么就要是用命令undisplay 如undisp number。

3、给变量赋值

       GDB测试时使用set命令对变量赋值,比如 set x=12,这就是将x的值设置成12。GDB中可以使用set args命令设置程序的命令行参数。在调用run命令检查函数参数的命令info args。GDB还可以定义自己的变量,GDB的print命令的输出值被标为$1,$2。这些值统称为值历史。如$1=(struct node*)0x80496a8àprint tmp->left

       在调试链表时,有时需要查看链表中的每个结点的值,这时可以使用GDB中的方便变量:设一个指针变量p,它在不同的时候指向链表中的不同节点,可以记录这个结点的值为set $q = p,后可以执行p *$q。这里的变量$q称为方便变量(convenience variable)。例如:

w[4] = {12, 5, 8, 29}

set $i = 0

p w[$i++]

4、程序崩溃处理

       程序崩溃一般是由于未经允许,访问了内存单元,也就是我们常常看见的段错误,相信大家对段错误(Segment default)并不陌生。

4.1 程序在内存中的布局

技术分享

4.2 信号含义

        操作系统有时发送信号给程序,信号发送的机制是操作系统将信号记录在进程表中,而不是实际上的发送信号。操作系统中的每种信号代表了不同的含义:

        SIGFDE信号:浮点异常导致、算数异常、溢出或除0,总线错误、对齐问题,物理内存不存在对应的信号是SIGBUS信号,SIGBUS会导致转存内存并终止。

4.3 核心文件(core文件)

        大家应该都看到过这个文件,特别是那些使用gdb对安卓系统中的软件进行gcore的时候见的最多了,不过那个不是程序崩溃了,而是为了分析代码。有些信号表示让某个进程继续是妥当,甚至是不可能的,在这种情况下,默认动作是提前终止进程,并编写一个名为核心文件(core file)的文件,俗称转储核心。

        核心文件包含程序崩溃时对程序状态的详细描述,桟的内容(或者,如果程序是多线程的,则是各个线程的桟),CPU寄存器的内容(多线程,则是线程的一组寄存器的值),程序静态分配变量的值(全局与static变量)

        File core可以查看这个特定核心文件的名称,在bash中,可以使用ulimit命令控制核心文件的创建。如:

        ulimit –c n : n是核心文件的最大大小,以千字节为单位,超过nKB的任何核心文件都不会被写。如果是创建任意大小的核心文件则:

        ulimit –c unlimited,ulimit – c可以检查核心文件。

5、vim技巧

        如果使用vim进行工程开发,是不是每次退出vim进行make比较麻烦,这里有个技巧可以避免退出vim,适用于单个没有makefile的代码,或者是有makefile的工程。在vim的命令行直接输入:make就可以直接编译了,如果程序有错误,可以使用:cnext或者cprev命令查看错误。有没有觉得很方便。技术分享技术分享技术分享

《软件调试艺术》读后感六

标签:gdb   调试   内存   

原文地址:http://blog.csdn.net/qianligaoshan/article/details/46389643

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